Apicurio-studio: yml API의 경둜 μˆœμ„œκ°€ μ •λ ¬λ˜μ§€ μ•Šκ³  UI의 κ²½λ‘œμ™€ μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2019λ…„ 03μ›” 12일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: Apicurio/apicurio-studio

μ•ˆλ…•ν•˜μ„Έμš”,

이것이 버그인지 κ°œμ„  μ‚¬ν•­μΈμ§€λŠ” λͺ¨λ₯΄κ² μ§€λ§Œ 여기에 μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ œμ— λŒ€ν•œ μ„€λͺ…

4개의 κ²½λ‘œκ°€ μžˆλŠ” APIλ₯Ό μƒμ„±ν•œλ‹€κ³  κ°€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

  • POST /bar
  • GET /bar/{id_bar}
  • POST /foo
  • GET /foo/{id_foo}

κ·ΈλŸ¬λ‚˜ λ‹€μŒκ³Ό 같은 νŠΉμ • μˆœμ„œλ‘œ UIλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚½μž…ν•œλ‹€κ³  κ°€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

  • GET /foo/{id_foo}
  • POST /bar
  • GET /bar/{id_bar}
  • POST /foo

UIκ°€ ν›Œλ₯­ν•˜κ³  κ²½λ‘œκ°€ λ‚΄κ°€ μ›ν•˜λŠ” 것과 μΌμΉ˜ν•˜μ—¬ μ •λ ¬λ˜μ–΄ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.

image

κ·ΈλŸ¬λ‚˜ κ²°κ³Ό yml은 μˆœμ„œκ°€ μ§€μ •λ˜μ§€ μ•Šκ³  UI에 λ‚˜νƒ€λ‚˜λŠ” 것과 μΌμΉ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

openapi: 3.0.2
info:
    title: 'Test API'
    version: 1.0.0
paths:
    '/foo/{id_foo}': {}
    /bar: {}
    '/bar/{id_bar}': {}
    /foo: {}

일반적으둜 μ›μ‹œ yml 파일의 경둜 μˆœμ„œλŠ” μ‹ κ²½ 쓰지 μ•ŠμŠ΅λ‹ˆλ‹€.
κ·ΈλŸ¬λ‚˜ λ¬Έμ œλŠ” ReDoc이 yml의 경둜 μˆœμ„œλ₯Ό λ”°λ₯Έλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ”°λΌμ„œ κ²°κ³Ό λ¬Έμ„œλŠ” μˆœμ„œκ°€ μ§€μ •λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

image

image

APIκ°€ μž‘λ™ν•˜κΈ° μ‹œμž‘ν•˜λ©΄ 일뢀 κ²½λ‘œκ°€ μ—…λ°μ΄νŠΈλ˜κ³  일뢀가 μ‚­μ œλ˜κ³  일뢀가 μƒμ„±λ˜κΈ° λ•Œλ¬Έμ— λ¬Έμ œμž…λ‹ˆλ‹€.
μ΄λŠ” κ²°κ³Ό λ¬Έμ„œκ°€ λΉ λ₯΄κ²Œ 엉망이 되고 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

ν•  수 μžˆλŠ” 일

λͺ‡ 가지 아이디어가 μžˆμŠ΅λ‹ˆλ‹€. μ™„λ²½ν•˜μ§€λŠ” μ•Šμ§€λ§Œ μ‹œμž‘μž…λ‹ˆλ‹€.
μ–΄μ©Œλ©΄ μš°λ¦¬λŠ” 그것듀을 λ°”νƒ•μœΌλ‘œ μ •κ΅ν•˜κ²Œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • 항상 좜λ ₯된 APIλ₯Ό μ •λ ¬
    μž₯점: κ΅¬ν˜„ν•˜κΈ° 쉬움(λ‚΄ μƒκ°μ—λŠ”?)
    단점: μ‚¬μš©μžκ°€ μžμ‹ μ˜ 주문을 선택할 수 μ—†μŒ
  • 좜λ ₯된 APIμ—μ„œ 경둜λ₯Ό μ •λ ¬ν•˜λŠ” μ˜΅μ…˜ μΆ”κ°€
    μž₯점: κ΅¬ν˜„ν•˜κΈ° 쉬움(λ‚΄ μƒκ°μ—λŠ”?)
    단점: μ‚¬μš©μžκ°€ κ°œλ³„ 경둜의 μˆœμ„œλ₯Ό λ³€κ²½ν•  수 μ—†μŠ΅λ‹ˆλ‹€.
  • ν‘œμ‹œλ˜λŠ” κ²½λ‘œκ°€ μ •λ ¬λ˜μ§€ μ•Šλ„λ‘ UIλ₯Ό μˆ˜μ •ν•˜κ³ ,
    λͺ¨λ“  ν•­λͺ©μ„ μ •λ ¬ν•˜λŠ” λ²„νŠΌμ„ μΆ”κ°€ν•˜κ³  κ°œλ³„ 경둜λ₯Ό μœ„μ•„λž˜λ‘œ μ΄λ™ν•˜λŠ” λ²„νŠΌμ„ μΆ”κ°€ν•©λ‹ˆλ‹€.
    μž₯점: λͺ¨λ“  것을 ν•΄κ²°ν•  수 있음
    단점: κ΅¬ν˜„ν•˜κΈ° κ°€μž₯ μ–΄λ ΅μŠ΅λ‹ˆλ‹€(제 μƒκ°μ—λŠ”?)
enhancement

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ‚˜λ„ 이 λ¬Έμ œμ— λΆ€λ”ͺμ³€λ‹€. 이에 λŒ€ν•œ λ‚΄ 관찰은 APICURIOκ°€ β€‹β€‹μƒˆ 경둜λ₯Ό λ§Œλ“€ λ•Œ ν˜„μž¬ YAML에 μƒˆ μ •μ˜λ₯Ό μΆ”κ°€ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ˜λŠ” yaml을 μ™„μ „νžˆ λŒ€μ²΄ν•  λ•Œ(예: 'μ†ŒμŠ€' νƒ­μ—μ„œ μˆ˜μ •ν•˜λŠ” 경우 κ°œλ³„ 경둜).

λ‚˜λŠ” YAML을 직접 μˆ˜μ •ν•œ ν›„(그런 λ‹€μŒ μ—΄ μ—…λ°μ΄νŠΈ) 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μˆ˜λ™μœΌλ‘œ μ‘°μž‘ν•˜κ³  μ–΄λ–»κ²Œλ“  ν”„λ‘œμ νŠΈλ₯Ό μ œκ±°ν•˜κ³  λ‹€μ‹œ μ‹œμž‘ν•΄μ•Ό ν•˜λŠ” λͺ¨λ“  것이 κΉ¨μ‘ŒμŠ΅λ‹ˆλ‹€.

@EricWittmann 이 λ§ν–ˆλ“―μ΄ μ½˜ν…μΈ λ₯Ό ReDoc에 λ„˜κΈ°κΈ° 전에 κ²½λ‘œμ™€ 기타 λͺ©λ‘μ„ μ •λ ¬ν•˜λŠ” 것이 κ°€μž₯ μ’‹λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 우리 슀슀둜 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  5 λŒ“κΈ€

μ£„μ†‘ν•©λ‹ˆλ‹€. ReDoc μŠ€ν¬λ¦°μƒ·μ— μ‚¬μš©ν•œ YML을 μ²¨λΆ€ν•˜λŠ” 것을 μžŠμ—ˆμŠ΅λ‹ˆλ‹€.
(λ‚΄κ°€ λΆ™μ—¬ 넣은 것은 μž‘μ—…μ΄ μ—†μœΌλ―€λ‘œ ReDoc은 빈 λ¬Έμ„œλ₯Ό μƒμ„±ν•©λ‹ˆλ‹€)

openapi: 3.0.2
info:
    title: 'Test API'
    version: 1.0.0
paths:
    '/foo/{id_foo}':
        get:
            summary: 'Obtain a foo'
            parameters:
                -
                    name: id_foo
                    in: path
                    required: true
                    schema:
                        type: number
            responses:
                '201':
                    description: 'A foo'
    /bar:
        post:
            summary: 'Create a bar'
            responses:
                '200':
                    description: 'A bar'
    '/bar/{id_bar}':
        get:
            summary: 'Obtain a bar'
            parameters:
                -
                    name: id_bar
                    in: path
                    required: true
                    schema:
                        type: number
            responses:
                '201':
                    description: 'Bar created'
    /foo:
        post:
            summary: 'Create a foo'
            responses:
                '200':
                    description: 'Foo created'

이것은 λ†€λžκ²Œλ„ 이전에 λ‚˜νƒ€λ‚˜μ§€ μ•Šμ€ ν₯미둜운 λ¬Έμ œμž…λ‹ˆλ‹€! μ‹€μ œλ‘œ UIμ—λŠ” μ˜΅μ…˜ Cλ₯Ό μ œκ³΅ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜λŠ” λͺ‡ ꡰ데가 μžˆμŠ΅λ‹ˆλ‹€. λ¬Έμ„œμ— λ‚˜νƒ€λ‚˜λŠ” μˆœμ„œλŒ€λ‘œ ν•­λͺ©μ„ ν‘œμ‹œν•˜μ§€λ§Œ μ •λ ¬ 및 μž¬μ •λ ¬(μ•„λ§ˆλ„ λŒμ–΄μ„œ 놓기) μ˜΅μ…˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

즉, μž„μ‹œ μ†”λ£¨μ…˜μ€ μ½˜ν…μΈ λ₯Ό ReDoc에 전달 ν•˜κΈ° 전에 κ²½λ‘œμ™€ 기타 λͺ©λ‘μ„ μ •λ ¬ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. 그것은 λΉ λ₯΄κ³  μ‰½κ²Œ ν•  수 있으며 Apicurio "미리보기" κΈ°λŠ₯의 νŠΉμ • 문제λ₯Ό ν•΄κ²°ν•  κ²ƒμž…λ‹ˆλ‹€.

이에 λŒ€ν•œ 생각/아이디어가 μžˆμŠ΅λ‹ˆκΉŒ? @jsenko ?

λ‚˜λ„ 이 λ¬Έμ œμ— λΆ€λ”ͺμ³€λ‹€. 이에 λŒ€ν•œ λ‚΄ 관찰은 APICURIOκ°€ β€‹β€‹μƒˆ 경둜λ₯Ό λ§Œλ“€ λ•Œ ν˜„μž¬ YAML에 μƒˆ μ •μ˜λ₯Ό μΆ”κ°€ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ˜λŠ” yaml을 μ™„μ „νžˆ λŒ€μ²΄ν•  λ•Œ(예: 'μ†ŒμŠ€' νƒ­μ—μ„œ μˆ˜μ •ν•˜λŠ” 경우 κ°œλ³„ 경둜).

λ‚˜λŠ” YAML을 직접 μˆ˜μ •ν•œ ν›„(그런 λ‹€μŒ μ—΄ μ—…λ°μ΄νŠΈ) 이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μˆ˜λ™μœΌλ‘œ μ‘°μž‘ν•˜κ³  μ–΄λ–»κ²Œλ“  ν”„λ‘œμ νŠΈλ₯Ό μ œκ±°ν•˜κ³  λ‹€μ‹œ μ‹œμž‘ν•΄μ•Ό ν•˜λŠ” λͺ¨λ“  것이 κΉ¨μ‘ŒμŠ΅λ‹ˆλ‹€.

@EricWittmann 이 λ§ν–ˆλ“―μ΄ μ½˜ν…μΈ λ₯Ό ReDoc에 λ„˜κΈ°κΈ° 전에 κ²½λ‘œμ™€ 기타 λͺ©λ‘μ„ μ •λ ¬ν•˜λŠ” 것이 κ°€μž₯ μ’‹λ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 우리 슀슀둜 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

#394와 λ§ˆμ°¬κ°€μ§€λ‘œ μ—¬κΈ°μ˜ 일반적인 μ•„μ΄λ””μ–΄λŠ” Apicurio UIκ°€ λͺ¨λ“  μœ ν˜•μ˜ μš”μ†Œ(경둜, ν•„λ“œ, μ•„λ§ˆλ„ 데이터 μœ ν˜•)에 λŒ€ν•œ YAML μˆœμ„œμ™€ μΌμΉ˜ν•΄μ•Ό ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. κ·Έ μˆœμ„œλŠ” λ•Œλ•Œλ‘œ μ€‘μš”ν•˜κΈ° λ•Œλ¬Έμž…λ‹ˆλ‹€(예: λ¬Έμ„œ 생성).

μ—¬κΈ°μ—μ„œ 도움이 될 κ°„λ‹¨ν•œ ν•œ κ°€μ§€λŠ” μ›μ‹œ YAML을 νŽΈμ§‘ν•˜κ³  μš”μ†Œμ˜ μˆœμ„œλ§Œ λ³€κ²½ν•  λ•Œ μ €μž₯ λ²„νŠΌμ„ ν™œμ„±ν™”ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ν˜„μž¬ ApicurioλŠ” λ„ˆλ¬΄ λ˜‘λ˜‘ν•˜κ³  λ³€κ²½λœ μœ μΌν•œ μš”μ†Œκ°€ μš”μ†Œμ˜ μˆœμ„œμΌ λ•Œ μ €μž₯ λ²„νŠΌμ„ νšŒμƒ‰μœΌλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.

λ‚˜λŠ” κ°€μž₯ 쒋은 것은 (μ–ΈκΈ‰λœ 바와 같이) μ†ŒμŠ€μ™€ μΌμΉ˜ν•˜λ„λ‘ UIμ—μ„œ μˆœμ„œλ₯Ό μ§€μ •ν•˜κ³  μ‚¬μš©μžκ°€ λŒμ–΄μ„œ 놓기λ₯Ό 톡해 물건을 이동할 수 μžˆλ„λ‘ ν•˜λŠ” 것이라고 μƒκ°ν•©λ‹ˆλ‹€. 그것은 μ‚¬μ†Œν•œ λ³€ν™”κ°€ μ•„λ‹ˆμ§€λ§Œ IMOλ₯Ό ν•˜λŠ” 것이 μ˜³μ€ μΌμž…λ‹ˆλ‹€. 생각 @jsenko ?

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰