API Blueprint

API Bluepirnt 是一個 API 描述語言,可以在開發 API 的過程,使用 markdown 方式快速彙整出 API 文件。

標準的 API Blueprint 是以 .apib 作為副檔名(media 類型為 text/vnd.apiblueprint),當拓展到 Github 上,會直接顯示對應的 Heightlight 。

【用法說明】

這裡直接描述如何建立一個 API 文件流程。

API 描述及版號

首先,在 Blueprint 文件一開始必須定義文件格式

FORMAT: 1A  --> API版本

# My Topic  --> 標題

This is my api description.  --> 描述

Resource Group

透過關鍵字 Group 可以用來將一個相關連的 resource 進行 group 為一個群組,例如

# Group Questions

Resources related to questions in the API.

Resource Collection

在 Resource group 群組內,可以定義 Collection ,這個來源可以用於檢視所有清單,訪問這個資源的 URL 則以方括弧定義在後面,例如:

## Question Collection [/questions]

Actions

API Blueprint 允許你去定義所以有資源的行為(actions)

會透過說明描述,後面再加上使用的方法,例如 Http method

### List All Questions [GET]
### Create New Questions [POST]

Url Parameters

針對請求,通常會需要夾帶參數,參數的定義會透過 Parameters 標題來區別,

接著透過 MSON (Markdown Syntax for Object Notation) 的方式定義參數

開始定義相關參數,交代參數型態及說明

+ Parameters
    + question_id (number) - ID of the Question in the form of an integer
    + number (number, required) - Number of Question number

關於 MSON 與 Json 之間轉換的方式進行對照,可能就會比較清楚

JSON:

{
  "id": 1,
  "title": "我的標題",
  "category": {
    "id": 1,
    "name": "產品名稱"
  },
  "status":0,
  "interest": [
  	{
  		"id": 1
  	}
  ]
}

MSON:

+ id: 1 (number, required) - Id
+ title: `我的標題` (string, required) - 內容描述
+ category
	+ id: 1 (number, required) - 分類 Id
	+ name: `名稱` (string, required) - 內容說明
+ status: 0(enum)
	+ 0 - 未進行
	+ 1 - 進行中
	+ 2 - 已完成
+ interest
	+ (object)
		+ id: 1 (number, required) - Id

可參考 blueprint 官方 MSON 說明

Response

當我們請求之後,會取得一個回應,回應的內容會透過 +, *, - 的方式來產生 list 格式,並且開始說明 response 的狀態碼,例如:

GET

+ Response 200 (application/json)
	+ Attributes (Server response)

POST

+ Response 201 (application/json)

DELTE

+ Response 204 (application/json)

POST and get Headers

+ Response 200 (application/json)
	+ Attributes (Server response)
	+ Headers
		Authentication: Bearer JWT

Response Attributes

另外,可以透過 Attributes 來描述返回的 body json 內容進行說明

例如

A Question object has the following attributes:

+ question
+ published_at - An ISO8601 date when the question was published.
+ url
+ choices - An array of Choice objects.

Response Detail

接著就是關於這個 reponse 的 json body 回應示意

       [
            {
                "question": "Favourite programming language?",
                "published_at": "2014-11-11T08:40:51.620Z",
                "url": "/questions/1",
                "choices": [
                    {
                        "choice": "Swift",
                        "url": "/questions/1/choices/1",
                        "votes": 2048
                    }, {
                        "choice": "Python",
                        "url": "/questions/1/choices/2",
                        "votes": 1024
                    }, {
                        "choice": "Objective-C",
                        "url": "/questions/1/choices/3",
                        "votes": 512
                    }, {
                        "choice": "Ruby",
                        "url": "/questions/1/choices/4",
                        "votes": 256
                    }
                ]
            }
        ]

推薦

通常可以透過 aglio 來render 出 HTML 格式

例如,透過以下語法可以轉出為html

aglio -i myapi.apib -o myapi.html

VS Code 則可以安裝拓展:API Blurprint Viewer, API Elements extension, Blueprint