OpenAPI 규범 에 기반 한 API 문서 입 니 다.swagger 소개.

머리말
집필 목적
이 글 은 Swagger 를 사용 하여 API 문 서 를 작성 하 는 방법 을 소개 합 니 다.본문 을 읽 으 면 다음 과 같이 할 수 있다.
  • swagger 가 뭔 지 알 아 보기
  • swagger 를 사용 하여 API 문 서 를 작성 하 는 기본 방법 파악
  • 관련 범위
  • 본 고 는 swagger specification (이하 '규범' 으로 번역) 에 대한 소 개 를 포함 하고 swaager 프로 토 콜 을 사용 하여 기능 이 완전 하고 구조 가 뚜렷 한 API 문 서 를 작성 하 는 방법 과 프로젝트 실천 에서 주의해 야 할 문제 들 을 포함한다.
  • swagger 의 생태 가 완전 하고 문서 생 성, 편집, 테스트 부터 각종 언어의 코드 자동 생 성 까지 많은 오픈 소스 도구 가 지원 합 니 다. 본 고 는 이러한 도구 의 사용 을 소개 하지 않 습 니 다.
  • 제1장 소개
    1.1 Swagger
    The World's Most Popular Framework for APIs.
    2016 년 1 월 1 일부 터 Swagger Specification 이 OAI (Open API Initiative) 에 기증 (기부) 되 었 으 며 OpenAPI Specification 의 기초 가 되 었 습 니 다.
    Swagger (스타킹 형) 가 첫 인상 을 준 것 은 [가장 (hen) 흐름 (niu) 행 (bai)] 입 니 다. Swagger 를 모 르 면 저 희 는 아웃 입 니 다. 공식 사 이 트 는?http://swagger.io/。
    Swagger 는 간단 하지만 강력 한 기능 을 가 진 API 표현 도구 입 니 다. 지구 상에 서 가장 큰 API 도구 생태 계 를 가지 고 있 으 며 수천 명의 개발 자 들 이 거의 모든 현대 프로 그래 밍 언어 를 사용 하여 Swagger 를 지원 하고 사용 하고 있 습 니 다. Swagger 를 사용 하여 API 를 생 성하 면 대화 형 문서, 코드 를 자동 으로 생 성 하 는 SDK, API 의 발견 특성 등 을 얻 을 수 있 습 니 다.
    현재 Swagger 는 Apigee, Getty 이미지, Intuit, Livingsocial, McKesson, 마이크로소프트, Morningstar, PayPal 등 세계 유명 기업 들 이 RESTful API 를 기반 으로 완벽 한 서비스 시스템 을 구축 하 는 데 도움 을 주 었 다.
    2.0 버 전이 발표 되 었 습 니 다. Swagger 는 더욱 강해 졌 습 니 다. 고 맙 게 도 Swagger 의 소스 코드 는 100% github 에서 시 작 됩 니 다.
    1.2 OpenAPI 규범
    OpenAPI 규범 은 Linux 재단 의 프로젝트 로 API 형식 이나 API 정 의 를 설명 하 는 언어 를 정의 함으로써 RESTful 서비스 개발 과정 을 규범화 시 키 려 고 합 니 다. OpenAPI 규범 은 API 의 기본 정 보 를 설명 하 는 데 도움 을 줍 니 다. 예 를 들 어:
  • 이 API 에 대한 일반적인 설명
  • 사용 가능 한 경로 (/ 자원)
  • 모든 경로 에서 사용 가능 한 동작 (가 져 오기 / 제출...)
  • 모든 작업 의 입 출력 형식
  • 현재 V 2.0 버 전의 OpenAPI 규범 (즉 SwaggerV 2.0 규범) 은 github 에서 발표 되 었 으 며, 이 문 서 는 매우 잘 쓰 여 있 고, 구조 가 뚜렷 하 며, 수시로 찾 아 볼 수 있 습 니 다. 규범 에 대한 학습 과 이해 에 관 하여 본 고 는 마지막 으로 달걀 이 있 습 니 다.
    1.3 OpenAPI 규범 을 왜 사용 합 니까?
  • OpenAPI 규범 과 같은 API 정의 언어 는 API 를 더욱 간단 하고 빠르게 표현 하 는 데 도움 을 줄 수 있 습 니 다. 특히 API 의 디자인 단계 에서 역할 이 특히 뛰 어 납 니 다
  • OpenAPI 규범 에 따라 작 성 된 바 이 너 리 텍스트 파일 은 코드 처럼 모든 VCS 도구 로 관리 할 수 있 습 니 다
  • 작성 이 완료 되면 API 문 서 는 다음 과 같이 할 수 있 습 니 다.
  • 수요 와 시스템 특성 에 대한 설명 근거
  • 앞 배경 조회, 토론, 자체 측정 의 기초
  • 부분 또는 모든 코드 가 자동 으로 생 성 되 는 근거
  • 다른 중요 한 역할, 예 를 들 어 오픈 플랫폼 개발 자의 수첩...

  • 1.4 API 문 서 를 어떻게 작성 합 니까?
    1.4.1 언어: JSON vs YAML
    우 리 는 JSON 이나 YAML 의 언어 형식 을 사용 하여 API 문 서 를 작성 할 수 있 습 니 다. 그러나 개인 적 으로 YAML 을 사용 하 는 것 을 권장 합 니 다. 그 이 유 는 더 간단 하기 때 문 입 니 다. 그림 이 천 마디 를 이 길 수 있 습 니 다. 먼저 JSON 으로 쓴 문 서 를 보십시오.
    
       
       
       
       
    1. {
    2. "swagger": "2.0",
    3. "info": {
    4. "version": "1.0.0",
    5. "title": "Simple API",
    6. "description": "A simple API to learn how to write OpenAPI Specification"
    7. },
    8. "schemes": [
    9. "https"
    10. ],
    11. "host": "simple.api",
    12. "basePath": "/openapi101",
    13. "paths": {
    14. "/persons": {
    15. "get": {
    16. "summary": "Gets some persons",
    17. "description": "Returns a list containing all persons.",
    18. "responses": {
    19. "200": {
    20. "description": "A list of Person",
    21. "schema": {
    22. "type": "array",
    23. "items": {
    24. "properties": {
    25. "firstName": {
    26. "type": "string"
    27. },
    28. "lastName": {
    29. "type": "string"
    30. },
    31. "username": {
    32. "type": "string"
    33. }
    34. }
    35. }
    36. }
    37. }
    38. }
    39. }
    40. }
    41. }
    42. }

    API YAML :

    
       
       
       
       
    1. swagger: "2.0"
    2. info:
    3. version: 1.0 .0
    4. title: Simple API
    5. description: A simple API to learn how to write OpenAPI Specification
    6. schemes:
    7. - https
    8. host: simple.api
    9. basePath: /openapi101
    10. paths:
    11. /persons:
    12. get:
    13. summary: Gets some persons
    14. description: Returns a list containing all persons.
    15. responses:
    16. 200:
    17. description: A list of Person
    18. schema:
    19. type: array
    20. items:
    21. required:
    22. - username
    23. properties:
    24. firstName:
    25. type: string
    26. lastName:
    27. type: string
    28. username:
    29. type: string

    , YAML 。 , :

    • OpenAPI YAML
    • YAML-JSON

    , 。( YAML 。 YAML。)

    1.4.2

    API , 。 。 , 。 , Swagger Editor, 、 、 , 。

    API , 。 :

    , , Swagger .md Swagger Editor 。


    2

    API , API ( API , “ ”) HTTP 、 , , HTTP 。

    2.1

    ( ) API :

    
       
       
       
       
    1. swagger: "2.0"
    2. info:
    3. version: 1.0 .0
    4. title: Simple API
    5. description: A simple API to learn how to write OpenAPI Specification
    6. schemes:
    7. - https
    8. host: simple.api
    9. basePath: /openapi101
    10. paths: {}

    , 。

    2.1.1 OpenAPI

    swagger 속성 으로 OpenAPI 규범 의 버 전 을 설명 합 니 다.

    swagger: "2.0"
    
       
       
       
       

    swagger, ,OpenAPI Swagger , , 。 , 2.0

    2.1.2 API

    API , API ( )、API 。

    
       
       
       
       
    1. info:
    2. version: 1.0. 0
    3. title: Simple API
    4. description: A simple API to learn how to write OpenAPI Specification

    2.1.3 API URL

    web API, URL 프로 토 콜 (http 또는 https), 호스트 이름, 루트 경로 로 설명 할 수 있 습 니 다.

    
       
       
       
       
    1. schemes:
    2. - https
    3. host: simple.api
    4. basePath: /openapi101

    https://simple.api/open101 루트 노드 로 각종 API 를 방문 합 니 다. 구체 적 인 환경 과 관련 이 있 고 API 가 설명 하 는 근본 적 인 내용 과 관련 이 없 기 때문에 이 부분 정 보 는 선택 할 수 있 습 니 다.
    2.1.4 API 의 조작 (operation)
    이 예 에서 우 리 는 API 동작 을 쓰 지 않 고 YAML 의 빈 대상 {} 으로 먼저 자 리 를 차지 합 니 다.
    2.2 API 작업 정의
    사용자 정 보 를 보 여 주 려 면 다음 과 같이 설명 할 수 있 습 니 다.

    
       
       
       
       
    1. swagger: "2.0"
    2. info:
    3. version: 1.0 .0
    4. title: Simple API
    5. description: A simple API to learn how to write OpenAPI Specification
    6. schemes:
    7. - https
    8. host: simple.api
    9. basePath: /openapi101
    10. paths:
    11. /persons:
    12. get:
    13. summary: Gets some persons
    14. description: Returns a list containing all persons.
    15. responses:
    16. 200:
    17. description: A list of Person
    18. schema:
    19. type: array
    20. items:
    21. required:
    22. - username
    23. properties:
    24. firstName:
    25. type: string
    26. lastName:
    27. type: string
    28. username:
    29. type: string

    2.2.1 (path)
    저 희 는 사용자 정 보 를 방문 하기 위해 /persons 을 추가 합 니 다.

    
       
       
       
       
    1. paths:
    2. /persons:

    2.2.2 HTTP

    에서 우 리 는 필요 한 자원 을 조작 하기 위해 임의의 HTTP 동 사 를 추가 할 수 있다.
    예 를 들 어 사용자 정 보 를 보 여 줘 야 한다. 우 리 는 /persons 경로 에 get 방법 을 추가 할 수 있 고 간단 한 설명 정보 (summary) 를 작성 하거나 이 방법 을 설명 하 는 긴 사설 (description) 도 작성 할 수 있다.

    
       
       
       
       
    1. get:
    2. summary: Gets some persons
    3. description: Returns a list containing all persons.

    ,  get https://simple.api/open101/persons

    2.2.3 (response) 유형
    모든 방법 (또는 조작) 에 대해 우 리 는 (responses) 에 임의의 HTTP 상태 코드 (예 를 들 어 200 OK) 를 추가 할 수 있다. 혹은 404 Not Found 등). 이 예 에서 우 리 는 200 의 응답 을 추가 합 니 다.

    
       
       
       
       
    1. responses:
    2. 200:
    3. description: A list of Person

    2.2.4

    get /persons (schema) 속성 으로 구체 적 인 반환 내용 을 설명 합 니 다.
    한 그룹의 사용자 정 보 는 하나의 사용자 정보 대상 (array) 이 고 모든 배열 요 소 는 하나의 사용자 정보 (object) 이다. 이 대상 은 세 개의 string 유형의 속성 을 포함한다. , , 그 중에서 은 반드시 제공 해 야 한다 (required).

    
       
       
       
       
    1. schema:
    2. type: array
    3. items:
    4. required:
    5. - username
    6. properties:
    7. firstName:
    8. type: string
    9. lastName:
    10. type: string
    11. username:
    12. type: string

    2.3 (query parameters)
    사용자 가 너무 많아 서 우 리 는 한꺼번에 출력 하고 싶 지 않다. 이 럴 때 페이지 출력 은 좋 은 선택 이다. 우 리 는 요청 파 라 메 터 를 추가 해서 실현 할 수 있다.
    
       
       
       
       
    1. swagger: "2.0"
    2. info:
    3. version: 1.0 .0
    4. title: Simple API
    5. description: A simple API to learn how to write OpenAPI Specification
    6. schemes:
    7. - https
    8. host: simple.api
    9. basePath: /openapi101
    10. paths:
    11. /persons:
    12. get:
    13. summary: Gets some persons
    14. description: Returns a list containing all persons. The list supports paging.
    15. #START############################################################################
    16. parameters:
    17. - name: pageSize
    18. in: query
    19. description: Number of persons returned
    20. type: integer
    21. - name: pageNumber
    22. in: query
    23. description: Page number
    24. type: integer
    25. # END ############################################################################
    26. responses:
    27. 200:
    28. description: A list of Person
    29. schema:
    30. type: array
    31. items:
    32. required:
    33. - username
    34. properties:
    35. firstName:
    36. type: string
    37. lastName:
    38. type: string
    39. username:
    40. type: string

    2.3.1 get

     get  속성:

    
       
       
       
       
    1. paths:
    2. /persons:
    3. get:
    4. summary: Gets some persons
    5. description: Returns a list containing all persons. The list supports paging.
    6. #START############################################################################
    7. parameters:
    8. # END ############################################################################

    2.3.2

    , (name) pageSizepageNumber 의 정형 (integer) 매개 변 수 를 간단하게 설명 한다.

    
       
       
       
       
    1. parameters:
    2. #START############################################################################
    3. - name: pageSize
    4. in: query
    5. description: Number of persons returned
    6. type: integer
    7. - name: pageNumber
    8. in: query
    9. description: Page number
    10. type: integer
    11. # END ##############################################################################
    12. responses:

    ,  get /persons?pageSize=20&pageNumber=2  2 ( 20 ) 。

    2.4 (path parameter)
    때때로 우 리 는 사용자 이름 에 따라 사용자 정 보 를 찾 으 려 고 할 때, 예 를 들 어 유사 한 인 터 페 이 스 를 추가 할 수 있 는 인터페이스 조작 을 추가 해 야 한다. /persons/{username} 사용자 정 보 를 가 져 오 는 동작 입 니 다. 주의, {username} 요청 경로 에 있 는 인자 입 니 다.
    
       
       
       
       
    1. swagger: "2.0"
    2. info:
    3. version: 1.0 .0
    4. title: Simple API
    5. description: A simple API to learn how to write OpenAPI Specification
    6. schemes:
    7. - https
    8. host: simple.api
    9. basePath: /openapi101
    10. paths:
    11. /persons:
    12. get:
    13. summary: Gets some persons
    14. description: Returns a list containing all persons. The list supports paging.
    15. parameters:
    16. - name: pageSize
    17. in: query
    18. description: Number of persons returned
    19. type: integer
    20. - name: pageNumber
    21. in: query
    22. description: Page number
    23. type: integer
    24. responses:
    25. 200:
    26. description: A list of Person
    27. schema:
    28. type: array
    29. items:
    30. required:
    31. - username
    32. properties:
    33. firstName:
    34. type: string
    35. lastName:
    36. type: string
    37. username:
    38. type: string
    39. #START############################################################################
    40. /persons/{username}:
    41. get:
    42. summary: Gets a person
    43. description: Returns a single person for its username
    44. parameters:
    45. - name: username
    46. in: path
    47. required: true
    48. description: The person 's username
    49. type: string
    50. responses:
    51. 200:
    52. description: A Person
    53. schema:
    54. required:
    55. - username
    56. properties:
    57. firstName:
    58. type: string
    59. lastName:
    60. type: string
    61. username:
    62. type: string
    63. 404:
    64. description: The Person does not exists.
    65. # END ############################################################################

    2.4.1  get /persons/{username} 

     /persons  ,  /persons/{username}  ,  get ( ) 。

    
       
       
       
       
    1. swagger: "2.0"
    2. info:
    3. version: 1.0 .0
    4. title: Simple API
    5. description: A simple API to learn how to write OpenAPI Specification
    6. schemes:
    7. - https
    8. host: simple.api
    9. basePath: /openapi101
    10. paths:
    11. /persons:
    
       
       
       
       
    1. username:
    2. type: string
    3. #START############################################################################
    4. /persons/{username}:
    5. get:
    6. summary: Gets a person
    7. description: Returns a single person for its username
    8. # END ############################################################################

    2.4.2  username

     {username}  ,  parameters  , ( { } ) 。  in  이 속성 은 경로 (path) 인자 임 을 표시 합 니 다.

    
       
       
       
       
    1. parameters:
    2. - name: username
    3. in: path
    4. required: true
    5. description: The person 's username
    6. type: string

    required: true, Swagger 의 자동 완성 기능 에는 이 속성 정의 가 포함 되 어 있 지 않 습 니 다. 쓰 지 않 았 다 면. require 속성 false username 매개 변 수 를 선택 할 수 있 습 니 다. 그러나 사실상 경로 매개 변수 로 서 필요 합 니 다.
    2.4.3 정의 응답 메시지
    단일 사용자 정 보 를 얻 는 데 도 작성 해 야 한 다 는 것 을 잊 지 마 세 요. 200 응답 메시지, 응답 메시지 의 내용 은 이전에 설명 한 사용자 정보 (사용자 정보 목록 의 요소) 입 니 다.

    
       
       
       
       
    1. responses:
    2. 200:
    3. description: A Person
    4. schema:
    5. required:
    6. - username
    7. properties:
    8. firstName:
    9. type: string
    10. lastName:
    11. type: string
    12. username:
    13. type: string

    ,API  username  , ,  404  。  404  :

    
       
       
       
       
    1. 404:
    2. description: The Person does not exists.

    2.5 (body parameter)
    사용자 정 보 를 추가 해 야 할 때 제공 할 수 있 는 것 이 필요 합 니 다. post /persons 라 는 API 조작 을 했다.
    
       
       
       
       
    1. swagger: "2.0"
    2. info:
    3. version: 1.0 .0
    4. title: Simple API
    5. description: A simple API to learn how to write OpenAPI Specification
    6. schemes:
    7. - https
    8. host: simple.api
    9. basePath: /openapi101
    10. paths:
    11. /persons:
    12. get:
    13. summary: Gets some persons
    14. description: Returns a list containing all persons. The list supports paging.
    15. parameters:
    16. - name: pageSize
    17. in: query
    18. description: Number of persons returned
    19. type: integer
    20. - name: pageNumber
    21. in: query
    22. description: Page number
    23. type: integer
    24. responses:
    25. 200:
    26. description: A list of Person
    27. schema:
    28. type: array
    29. items:
    30. required:
    31. - username
    32. properties:
    33. firstName:
    34. type: string
    35. lastName:
    36. type: string
    37. username:
    38. type: string
    39. #START############################################################################
    40. post:
    41. summary: Creates a person
    42. description: Adds a new person to the persons list.
    43. parameters:
    44. - name: person
    45. in: body
    46. description: The person to create.
    47. schema:
    48. required:
    49. - username
    50. properties:
    51. firstName:
    52. type: string
    53. lastName:
    54. type: string
    55. username:
    56. type: string
    57. responses:
    58. 204:
    59. description: Persons succesfully created.
    60. 400:
    61. description: Persons couldn 't have been created.
    62. # END ############################################################################
    63. /persons/{username}:
    64. get:
    65. summary: Gets a person
    66. description: Returns a single person for its username.
    67. parameters:
    68. - name: username
    69. in: path
    70. required: true
    71. description: The person 's username
    72. type: string
    73. responses:
    74. 200:
    75. description: A Person
    76. schema:
    77. required:
    78. - username
    79. properties:
    80. firstName:
    81. type: string
    82. lastName:
    83. type: string
    84. username:
    85. type: string
    86. 404:
    87. description: The Person does not exists.

    2.5.1  post /persons 

     /persons   post  :

    
       
       
       
       
    1. paths:
    2. /persons:
    
       
       
       
       
    1. post:
    2. summary: Creates a person
    3. description: Adds a new person to the persons list.

    2.5.2

     post  ,  in  속성 명시 적 설명 매개 변 수 는? body 매개 변수 정의 참조 get /persons/{username} 의 200 응답 메시지 체 파라미터, 즉 사용자 의 성, 이름, 사용자 이름 을 포함 합 니 다.

    
       
       
       
       
    1. parameters:
    2. - name: person
    3. in: body
    4. description: The person to create.
    5. schema:
    6. required:
    7. - username
    8. properties:
    9. firstName:
    10. type: string
    11. lastName:
    12. type: string
    13. username:
    14. type: string

    2.5.3

     post  。

    
       
       
       
       
    1. responses:
    2. 204:
    3. description: Persons succesfully created.
    4. 400:
    5. description: Persons couldn 't have been created.

    3

    API 。 , , “ ”。 (definitions) API 。

    3.1

    2 API ,  Person  ,  DRY ☹。

    
       
       
       
       
    1. swagger: "2.0"
    2. info:
    3. version: 1.0 .0
    4. title: Simple API
    5. description: A simple API to learn how to write OpenAPI Specification
    6. schemes:
    7. - https
    8. host: simple.api
    9. basePath: /openapi101
    10. paths:
    11. /persons:
    12. get:
    13. summary: Gets some persons
    14. description: Returns a list containing all persons. The list supports paging.
    15. parameters:
    16. - name: pageSize
    17. in: query
    18. description: Number of persons returned
    19. type: integer
    20. - name: pageNumber
    21. in: query
    22. description: Page number
    23. type: integer
    24. responses:
    25. 200:
    26. description: A list of Person
    27. schema:
    28. type: array
    29. items:
    30. #START 1 ###################################################################
    31. required:
    32. - username
    33. properties:
    34. firstName:
    35. type: string
    36. lastName:
    37. type: string
    38. username:
    39. type: string
    40. # END 1 ###################################################################
    41. post:
    42. summary: Creates a person
    43. description: Adds a new person to the persons list.
    44. parameters:
    45. - name: person
    46. in: body
    47. description: The person to create.
    48. schema:
    49. #START 2 ###################################################################
    50. required:
    51. - username
    52. properties:
    53. firstName:
    54. type: string
    55. lastName:
    56. type: string
    57. username:
    58. type: string
    59. # END 2 ###################################################################
    60. responses:
    61. 204:
    62. description: Persons succesfully created.
    63. 400:
    64. description: Persons couldn 't have been created.
    65. /persons/{username}:
    66. get:
    67. summary: Gets a person
    68. description: Returns a single person for its username.
    69. parameters:
    70. - name: username
    71. in: path
    72. required: true
    73. description: The person 's username
    74. type: string
    75. responses:
    76. 200:
    77. description: A Person
    78. schema:
    79. #START 3 ###################################################################
    80. required:
    81. - username
    82. properties:
    83. firstName:
    84. type: string
    85. lastName:
    86. type: string
    87. username:
    88. type: string
    89. # END 3 ###################################################################
    90. 404:
    91. description: The Person does not exists.

     (definition) 이 문 서 를 재 구성 합 니 다:

    
       
       
       
       
    1. swagger: "2.0"
    2. info:
    3. version: 1.0.0
    4. title: Simple API
    5. description: A simple API to learn how to write OpenAPI Specification
    6. schemes:
    7. - https
    8. host: simple.api
    9. basePath: /openapi101
    10. paths:
    11. /persons:
    12. get:
    13. summary: Gets some persons
    14. description: Returns a list containing all persons. The list supports paging.
    15. parameters:
    16. - name: pageSize
    17. in: query
    18. description: Number of persons returned
    19. type: integer
    20. - name: pageNumber
    21. in: query
    22. description: Page number
    23. type: integer
    24. responses:
    25. 200:
    26. description: A list of Person
    27. schema:
    28. #START############################################################################
    29. $ref: "#/definitions/Persons"
    30. # END ############################################################################
    31. post:
    32. summary: Creates a person
    33. description: Adds a new person to the persons list.
    34. parameters:
    35. - name: person
    36. in: body
    37. description: The person to create.
    38. schema:
    39. #START############################################################################
    40. $ref: "#/definitions/Person"
    41. # END ############################################################################
    42. responses:
    43. 204:
    44. description: Persons succesfully created.
    45. 400:
    46. description: Persons couldn 't have been created.
    47. /persons/{username}:
    48. get:
    49. summary: Gets a person
    50. description: Returns a single person for its username.
    51. parameters:
    52. - name: username
    53. in: path
    54. required: true
    55. description: The person's username
    56. type: string
    57. responses:
    58. 200:
    59. description: A Person
    60. schema:
    61. #START############################################################################
    62. $ref: "#/definitions/Person"
    63. # END ############################################################################
    64. 404:
    65. description: The Person does not exists.
    66. #START ####################################################################
    67. definitions:
    68. Person:
    69. required:
    70. - username
    71. properties:
    72. firstName:
    73. type: string
    74. lastName:
    75. type: string
    76. username:
    77. type: string
    78. Persons:
    79. type: array
    80. items:
    81. $ref: "#/definitions/Person"
    82. # END ####################################################################

    。 OpenAPI (definition) “ , ”。

    3.1.1  (definitions) 항목
    우선 API 문서 의 끝 에 하 나 를 추가 합 니 다  (definitions) 항목 (사실 문서 의 임 의 위치 에 놓 을 수도 있 습 니 다. 문서 끝 에 두 는 것 이 습관 일 뿐 입 니 다):

    
       
       
       
       
    1. 404:
    2. description: The Person does not exists.
    3. #START############################################################################
    4. definitions:
    5. # END ############################################################################

    3.1.2 ( )
    그리고 저희 가 하나 더... Person 대상 의 정의:

    
       
       
       
       
    1. definitions:
    2. #START############################################################################
    3. Person:
    4. required:
    5. - username
    6. properties:
    7. firstName:
    8. type: string
    9. lastName:
    10. type: string
    11. username:
    12. type: string
    13. # END ############################################################################

    3.1.3 다른 것 정의 항목 에서, 우 리 는 방금 정 의 된 것 을 즉시 인용 할 수 있다 Person 다른 , Persons. Persons 를 추가 합 니 다. 하나 Person 대상 의 배열 입 니 다. 이전에 직접 정의 한 것 과 다른 점 은 우리 가 속성 을 추가 한 것 입 니 다. 즉, $ref 참조 Person 。

    
       
       
       
       
    1. Persons:
    2. type: array
    3. items:
    4. $ref: "#/definitions/Person"

    3.1.4
    일단 정의 가 되면 Person ,우 리 는 원래 응답 메시지 에 해당 하 는 정의 필드 를 교체 할 수 있다.
    3.1.4.1 get/persons
    원래:

    
       
       
       
       
    1. responses:
    2. 200:
    3. description: A list of Person
    4. schema:
    5. type: array
    6. items:
    7. required:
    8. - username
    9. properties:
    10. firstName:
    11. type: string
    12. lastName:
    13. type: string

    
       
       
       
       
    1. responses:
    2. 200:
    3. description: A list of Person
    4. schema:
    5. $ref: "#/definitions/Persons"

    3.1.4.2 get/persons/{username}

    
       
       
       
       
    1. responses:
    2. 200:
    3. description: A Person
    4. schema:
    5. required:
    6. - username
    7. properties:
    8. firstName:
    9. type: string
    10. lastName:
    11. type: string
    12. username:
    13. type: string

    
       
       
       
       
    1. responses:
    2. 200:
    3. description: A Person
    4. schema:
    5. $ref: "#/definitions/Person"

    3.1.5
    메시지 에서 만 사용 할 수 있 는 것 이 아니 라 매개 변수 에서 도 사용 할 수 있 습 니 다.
    3.1.5.1 post /persons
    원래:

    
       
       
       
       
    1. post:
    2. summary: Creates a person
    3. description: Adds a new person to the persons list.
    4. parameters:
    5. - name: person
    6. in: body
    7. description: The person to create.
    8. schema:
    9. required:
    10. - username
    11. properties:
    12. firstName:
    13. type: string
    14. lastName:
    15. type: string
    16. username:
    17. type: string
     ($ref) 의 역할 을 다음 에 응답 메시지 의 정의 에 사용 합 니 다.
    
       
       
       
       
    1. post:
    2. summary: Creates a person
    3. description: Adds a new person to the persons list.
    4. parameters:
    5. - name: person
    6. in: body
    7. description: The person to create.
    8. schema:
    9. $ref: "#/definitions/Person"

    
       
       
       
       
    1. swagger: "2.0"
    2. info:
    3. version: 1.0 .0
    4. title: Simple API
    5. description: A simple API to learn how to write OpenAPI Specification
    6. schemes:
    7. - https
    8. host: simple.api
    9. basePath: /openapi101
    10. paths:
    11. /persons:
    12. get:
    13. summary: Gets some persons
    14. description: Returns a list containing all persons. The list supports paging.
    15. parameters:
    16. - name: pageSize
    17. in: query
    18. description: Number of persons returned
    19. type: integer
    20. - name: pageNumber
    21. in: query
    22. description: Page number
    23. type: integer
    24. responses:
    25. 200:
    26. description: A list of Person
    27. schema:
    28. $ref: "#/definitions/Persons"
    29. #START############################################################################
    30. 500:
    31. $ref: "#/responses/Standard500ErrorResponse"
    32. # END ############################################################################
    33. post:
    34. summary: Creates a person
    35. description: Adds a new person to the persons list.
    36. parameters:
    37. - name: person
    38. in: body
    39. description: The person to create.
    40. schema:
    41. $ref: "#/definitions/Person"
    42. responses:
    43. 204:
    44. description: Persons succesfully created.
    45. 400:
    46. description: Persons couldn 't have been created.
    47. #START############################################################################
    48. 500:
    49. $ref: "#/responses/Standard500ErrorResponse"
    50. # END ############################################################################
    51. /persons/{username}:
    52. get:
    53. summary: Gets a person
    54. description: Returns a single person for its username.
    55. parameters:
    56. - name: username
    57. in: path
    58. required: true
    59. description: The person 's username
    60. type: string
    61. responses:
    62. 200:
    63. description: A Person
    64. schema:
    65. $ref: "#/definitions/Person"
    66. 404:
    67. description: The Person does not exists.
    68. #START############################################################################
    69. 500:
    70. $ref: "#/responses/Standard500ErrorResponse"
    71. # END ############################################################################
    72. definitions:
    73. Person:
    74. required:
    75. - username
    76. properties:
    77. firstName:
    78. type: string
    79. lastName:
    80. type: string
    81. username:
    82. type: string
    83. Persons:
    84. type: array
    85. items:
    86. $ref: "#/definitions/Person"
    87. #START############################################################################
    88. Error:
    89. properties:
    90. code:
    91. type: string
    92. message:
    93. type: string
    94. responses:
    95. Standard500ErrorResponse:
    96. description: An unexpected error occured.
    97. schema:
    98. $ref: "#/definitions/Error"
    99. # END ############################################################################

    3.2

    ($ref) 그래서 우 리 는 이렇게 쓸 수 있다.

    
       
       
       
       
    1. paths:
    2. /persons:
    3. get:
    4. summary: Gets some persons
    5. description: Returns a list containing all persons. The list supports paging.
    6. parameters:
    7. - name: pageSize
    8. in: query
    9. description: Number of persons returned
    10. type: integer
    11. - name: pageNumber
    12. in: query
    13. description: Page number
    14. type: integer
    15. responses:
    16. 200:
    17. description: A list of Person
    18. schema:
    19. $ref: "#/definitions/Persons"
    20. #START############################################################################
    21. 500:
    22. description: An unexpected error occured.
    23. schema:
    24. properties:
    25. code:
    26. type: string
    27. message:
    28. type: string
    29. # END ############################################################################
    30. post:
    31. summary: Creates a person
    32. description: Adds a new person to the persons list.
    33. parameters:
    34. - name: person
    35. in: body
    36. description: The person to create.
    37. schema:
    38. $ref: "#/definitions/Person"
    39. responses:
    40. 204:
    41. description: Persons succesfully created.
    42. 400:
    43. description: Persons couldn 't have been created.
    44. #START############################################################################
    45. 500:
    46. description: An unexpected error occured.
    47. schema:
    48. properties:
    49. code:
    50. type: string
    51. message:
    52. type: string
    53. # END ############################################################################
    54. /persons/{username}:
    55. get:
    56. summary: Gets a person
    57. description: Returns a single person for its username.
    58. parameters:
    59. - name: username
    60. in: path
    61. required: true
    62. description: The person 's username
    63. type: string
    64. responses:
    65. 200:
    66. description: A Person
    67. schema:
    68. $ref: "#/definitions/Person"
    69. 404:
    70. description: The Person does not exists.
    71. #START############################################################################
    72. 500:
    73. description: An unexpected error occured.
    74. schema:
    75. properties:
    76. code:
    77. type: string
    78. message:
    79. type: string
    80. # END ############################################################################

    3.2.1 HTTP 500

    HTTP 500 , API (error code) (message) , :

    
       
       
       
       
    1. definitions:
    2. Person:
    3. required:
    4. - username
    5. properties:
    6. firstName:
    7. type: string
    8. lastName:
    9. type: string
    10. username:
    11. type: string
    12. Persons:
    13. type: array
    14. items:
    15. $ref: "#/definitions/Person"
    16. #START############################################################################
    17. Error:
    18. properties:
    19. code:
    20. type: string
    21. message:
    22. type: string
    23. # END ############################################################################

    3.2.2 Error

    “ 、 ” ,  Error  :

    
       
       
       
       
    1. paths:
    2. /persons:
    3. get:
    4. summary: Gets some persons
    5. description: Returns a list containing all persons. The list supports paging.
    6. parameters:
    7. - name: pageSize
    8. in: query
    9. description: Number of persons returned
    10. type: integer
    11. - name: pageNumber
    12. in: query
    13. description: Page number
    14. type: integer
    15. responses:
    16. 200:
    17. description: A list of Person
    18. schema:
    19. $ref: "#/definitions/Persons"
    20. 500:
    21. description: An unexpected error occured.
    22. schema:
    23. #START############################################################################
    24. $ref: "#/definitions/Error"
    25. # END ############################################################################
    26. post:
    27. summary: Creates a person
    28. description: Adds a new person to the persons list.
    29. parameters:
    30. - name: person
    31. in: body
    32. description: The person to create.
    33. schema:
    34. $ref: "#/definitions/Person"
    35. responses:
    36. 204:
    37. description: Persons succesfully created.
    38. 400:
    39. description: Persons couldn 't have been created.
    40. 500:
    41. description: An unexpected error occured.
    42. schema:
    43. #START############################################################################
    44. $ref: "#/definitions/Error"
    45. # END ############################################################################
    46. /persons/{username}:
    47. get:
    48. summary: Gets a person
    49. description: Returns a single person for its username.
    50. parameters:
    51. - name: username
    52. in: path
    53. required: true
    54. description: The person 's username
    55. type: string
    56. responses:
    57. 200:
    58. description: A Person
    59. schema:
    60. $ref: "#/definitions/Person"
    61. 404:
    62. description: The Person does not exists.
    63. 500:
    64. description: An unexpected error occured.
    65. schema:
    66. #START############################################################################
    67. $ref: "#/definitions/Error"
    68. # END ############################################################################

    ($ref) 는 정 의 된 응답 메 시 지 를 사용 합 니 다. 예 를 들 어:
    3.2.4.1 get /users

    
       
       
       
       
    1. definitions:
    2. Person:
    3. required:
    4. - username
    5. properties:
    6. firstName:
    7. type: string
    8. lastName:
    9. type: string
    10. username:
    11. type: string
    12. Persons:
    13. type: array
    14. items:
    15. $ref: "#/definitions/Person"
    16. Error:
    17. properties:
    18. code:
    19. type: string
    20. message:
    21. type: string
    22. #START############################################################################
    23. responses:
    24. Standard500ErrorResponse:
    25. description: An unexpected error occured.
    26. schema:
    27. $ref: "#/definitions/Error"
    28. # END ############################################################################

    3.2.3

    , 。 OpenAPI responses , , 。

    
       
       
       
       
    1. responses:
    2. 200:
    3. description: A list of Person
    4. schema:
    5. $ref: "#/definitions/Persons"
    6. #START############################################################################
    7. 500:
    8. $ref: "#/responses/Standard500ErrorResponse"
    9. # END ############################################################################

    :  Error  。

    3.2.4

    3.2.4.2 post/users

    
       
       
       
       
    1. responses:
    2. 204:
    3. description: Persons succesfully created.
    4. 400:
    5. description: Persons couldn 't have been created.
    6. #START############################################################################
    7. 500:
    8. $ref: "#/responses/Standard500ErrorResponse"
    9. # END ############################################################################

    3.2.4.3 get/users/{username}

    
       
       
       
       
    1. responses:
    2. 200:
    3. description: A Person
    4. schema:
    5. $ref: "#/definitions/Person"
    6. 404:
    7. description: The Person does not exists.
    8. #START############################################################################
    9. 500:
    10. $ref: "#/responses/Standard500ErrorResponse"
    11. # END ############################################################################

    3.3

    、 , 。

    
       
       
       
       
    1. swagger: "2.0"
    2. info:
    3. version: 1.0 .0
    4. title: Simple API
    5. description: A simple API to learn how to write OpenAPI Specification
    6. schemes:
    7. - https
    8. host: simple.api
    9. basePath: /openapi101
    10. paths:
    11. /persons:
    12. get:
    13. summary: Gets some persons
    14. description: Returns a list containing all persons. The list supports paging.
    15. #START############################################################################
    16. parameters:
    17. - $ref: "#/parameters/pageSize"
    18. - $ref: "#/parameters/pageNumber"
    19. # END ############################################################################
    20. responses:
    21. 200:
    22. description: A list of Person
    23. schema:
    24. $ref: "#/definitions/Persons"
    25. 500:
    26. $ref: "#/responses/Standard500ErrorResponse"
    27. post:
    28. summary: Creates a person
    29. description: Adds a new person to the persons list.
    30. parameters:
    31. - name: person
    32. in: body
    33. description: The person to create.
    34. schema:

    좋은 웹페이지 즐겨찾기