[Week4] - API


Posted by Kayla on 2020-12-18

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/

curl 指令










Related Posts

[Golang] strconv

[Golang] strconv

Day 142

Day 142

資料格式的選擇

資料格式的選擇


Comments