tags: 程式導師實驗計畫第四期
[NET101]
Week4
API 是什麼?
API 就像餐廳服務生,告訴服務生點的品項及需求後,負責將需求傳給餐廳內場,內場製作完成,再負責將製作好的餐點,送到客人手中,扮演客戶和餐廳內場中間傳遞的角色。
索取資源者(點餐者):
每個 API 都有自己所開放可以使用的項目,以及規則。從餐廳點餐的角度看,例如想要客製餐點或是想詢問菜單上沒有的品項是否有販賣,當我們將需求告訴服務生的時候,服務生會回覆這些需求是否可行。
對應到使用 API,發出需求時,如果點了一個沒有提供的項目,就可能會收到錯誤,拿不到資料的回覆,只能夠取得有提供的東西。
提供者(供應的餐廳):
除了可以向別人索取想要的資料外,也可以做為提供的一方。就像餐廳,可以決定要販售什麼品項餐點,以及販售的形式有哪些。
對應到提供 API 的一方,需像提供給使用者產品說明書一樣,需給定一個規範,決定要開放哪些項目給別人索取和定義取得的方式等等......
為什麼需要 API:
索取他人所提供的資料,或提供他人想提供的資料。(使用API/提供API)透過 API,可以讓雙方交換資料。
API / WebAPI:
- API:不需網路
- WebAPI:HTTP API 透過 HTTP 協議來交換資料
Web API 的資料格式
關於 JSON:
一種輕量級的資料交換格式,XML 相較之下,JSON較為輕量、易於閱讀。看起來很類似JavaScript 的 object,使用時需要轉換。
JSON 支援的資料格式:
- 字串 (string)
- 數值 (number)
- 布林值 (boolean)
- 空值 (null)
- 物件 (object)
- 陣列 (array)
JSON 格式轉換
JSON.parse()
API 所回傳的會是一個 JSON 格式的物件,所印出的是字串,若要轉為 JavaScript object,可使用JSON.parse()
轉換。
console.log(json)
印出特定要的資訊(User Janet 的 first_firstname):console.log(json.data.first_firstname) //Janet
const request = require('request');
const process = require('process'); //引入process
request(
'https://reqres.in/api/users/2',
function(error, response, body) {
const json = JSON.parse(body) //JSON 格式的字串
console.log(json)
}
)
JSON.stringify()
將 JavaScript 物件轉為 JSON 字串
SOAP
SOAP(Simple Object Access Protocol) 資料透過 XML 交換,目前較少在使用。
RESTful 是什麼?
並非一個協定,只是一種設計風格。在不同公司,不一樣的工程師,所設計的名稱都會不一樣,如果沒有統一的命名方式,將會造成在引用不同 API 時,都需要去理解其命名規則含意,這也就是使用 RESTful API 原因。
ex:HTML div 標籤,可以使用更有語意化的標籤去取代。
RESTful API 的 URL 命名
RESTful-END point | ||||
---|---|---|---|---|
新增使用者 | POST | /new_user | /users | |
刪除使用者 | POST | DELET | /delete_user | /users/:id |
查詢使用者 | GET | /users_data/:id | /users/:id | |
使用者列表 | GET | /users_list | /users | |
更改使用者 | POST | PATCH | /update_users | /users/:id |
Note: 刪除並非一定要用 delete,並不是一個規範,可用 POST 模擬刪除,只要後端可以處理即可,只是不同人可能有不同命名方式,會造成混淆。
工具 / 指令
curl
用來透過 HTTP Protocol 定義存取網路資源的協定,用 client 或 sever 模式來取得網路資源。
curl
+ 網址,發一個 GET 的 request 到指定的網址,terminal 回傳 response。
指令 | 說明 | |
---|---|---|
-I | curl+網址 -I | 只取得 Header 資料 |
-L | 跟隨著網址 301/302 redirect | |
-H | 設定 request 裡所攜帶的 header | |
-X | GET/POST, PUT, DELETE, PATCH 使用指定的 http method 來發出http request |
nslookup: 解析 domain ip地址。
ping: 用來測試是否可連接。
talnet: 去 ping 一個指令的 port。
talnet + address +port number
若是沒反應或 timeout 代表這個 port 沒有開啟。也可在 port 後面,可用來傳資料,例如最後再加上 GET/