iT邦幫忙

2024 iThome 鐵人賽

DAY 4
0
IT 管理

我要成為文件工程師── Web API 文件撰寫系列 第 4

[Day 04] OpenAPI:標準的 API 描述技術規範(三)

  • 分享至 

  • xImage
  •  

OpenAPI 的資料型別(type)是基於 Json 擴充,基礎型別有 booleanintegernumberstring......等,並可藉由 format 撰寫更完整的描述,例如:

type format 說明
integer int32 帶有正負號的 32 位元整數
integer int64 帶有正負號的 64 位元整數,即 long
number float 單精度浮點數
number double 雙精度浮點數
string password 密碼
string datetime 日期時間

透過撰寫 format 欄位可以讓型別描述更加明確,由於資料型別在不同語言中不盡相同,越完整的規格越能讓開發者判斷在串接服務時應如何處理該欄位的資料。

除了基礎型別外,type 也包含 arrayobject 兩種方式來描述資料結構。當要描述陣列 (array) 型別時,搭配關鍵字 items 定義該陣列中項目的型別,例如:

# 由整數組成的陣列
type: array
items:
    type: integer

# 由日期時間組成的陣列
type: array
items:
    type: string
    format: datetime

而描述物件 (object) 時,則須搭配關鍵字 properties 描述其中的各個欄位,例如:

# 對應以下 json 的 object
# {
#     "name": "string",
#     "phone": "string",
#     "age": 0,
# }
type: object
properties:
    name:
        type: string
    phone:
        type: string
    age:
        type: integer

物件中若有必填欄位,則使用 required 節點列出所有必填欄位名稱,例如:

# name, phone 為必填欄位
# age 為非必填欄位
type: object
properties:
    name:
        type: string
    phone:
        type: string
    age:
        type: integer
required:
    - name
    - phone

基礎型別、陣列和物件可以組合使用,例如:

# 對應以下 json 的 object
# {
#     "name": "string",
#     "age": 0,
#     "interest": ["swimming", "reading"],
#     "notification":
#     {
#         "email": true,
#         "app": false
#     }
# }
type: object
properties:
    name:
        type: string
    age:
        type: integer
    interest:
        type: array
        items:
            type: string
    notification:
        type: object
        properties:
            email:
                type: boolean
            app:
                type: boolean

# 由物件組成的陣列
type: array
items:
    type: object
    properties:
        name:
            type: string
        age:
            type: integer

理解如何定義資料結構後就可以撰寫 schema 節點,並針對資料結構的各個欄位增加 description 節點增加文字描述,讓文件更完整,例如:

openapi: 3.1.0
info:
  title: 會員服務 API
  description: 提供會員相關服務的 API 介面。
  version: 1.0.0
servers:
  - url: https://api.example.com/v1
    description: 正式環境
  - url: https://api.staging.example.com/v1
    description: 測試環境
paths:
  /members:
    post:
      summary: 註冊新會員
      operationId: registerMember
      requestBody:
        description: 會員註冊資訊
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: 姓名
                email:
                  type: string
                  format: email
                  description: 電子郵件
                password:
                  type: string
                  format: password
                  description: 密碼
              required:
                - name
                - email
                - password
        required: true
      responses:
        '201':
          description: 註冊成功
          content:
            application/json:
              schema:
                type: object
                properties:
                  memberId:
                    type: string
                    description: 會員 ID
                required:
                  - memberId
        '400':
          description: 請求格式錯誤

https://ithelp.ithome.com.tw/upload/images/20240917/20151137ivc5PZw0ND.png

到這邊可能會有些疑問,難道同個自訂型別每次出現在文件中,不能定義一次完整的結構後直接引用嗎?除了型別和說明,有沒有辦法提供範例資料讓文件更完整呢?當然可以!明天將說明如何收斂文件中的結構定義,並撰寫範例資料以完善文件內容。


上一篇
[Day 03] OpenAPI:標準的 API 描述技術規範(二)
下一篇
[Day 05] OpenAPI:標準的 API 描述技術規範(四)
系列文
我要成為文件工程師── Web API 文件撰寫12
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言