Structure or Pattern 目錄

1. REST API & GraphQL

 

 

 

 

— 持續更新中 —

REST API & GraphQL

REST API

利用 GET、POST、PUT、DELETE 等等的 HTTP 動詞,搭配 /resouces、/resouces/:id 這樣代表資源集合以及個別資源的路徑來作為 API 介面

Response 附帶著合適的 HTTP Status Code,可以清楚知道這次請求的結果

example:
  • GET /users<- 取得使用者清單
  • POST /users<- 新增使用者
  • GET /users/1<- 取得 id=1 的使用者
  • PUT /users/1<- 修改 id=1 的使用者
  • DELETE /users/1<- 刪除 id=1 的使用者
example response:
  • 200 OK
  • 400 Bad Request
  • 404 Not Found
問題/缺點:
  • 參數、回傳值型別不固定 >> GraphQL:仔細的定義型別,所有的值都必須通過Validation
  • 多版本時,前後端常不匹配 >> GraphQL:前後端可以共用一個固定的 Schema
  • 會拿多餘的欄位 >> GraphQL:要查詢的欄位要清楚的列出來,其他欄位就不會包括在回應裡面
  • 不容易處理巢狀資源 >> GraphQL:request的json資料格式就進行巢狀
  • 會不斷成長的Endpoint 數量 >> GraphQL:永遠都只有一個 Endpoint

GraphQL

一、改善REST API缺點以外:

1. 頁面所需的資訊盡量能在一個 Request 內完成,來優化網路的傳輸問題

2. GraphQL Layer / GraphQL API Gateway 設計

除了可以封裝背後任何既有 API Service 外,新的功能也能直接與 Database 溝通,並且將邏輯實作在 GraphQL 上,最後只提供一個 GraphQL Endpoint 給前端使用

(1) GraphQL Layer: 封裝、整合舊有REST API以提供GraphQL予前端,可能包含邏輯整合

client→GraphQL→→REST API_1 – Data

client→GraphQL→→REST API_2 – Data

(2) GraphQL Gateway: 本身不與DB連結、邏輯移到更後面的GraphQL API進行處理。而後面的 GraphQL Server 稱為 GraphQL Native

client→GraphQL→→REST API_1 – Data

client→GraphQL→→REST API_2 – Data

client→GraphQL→→GraphQL – Data

二、透過HTTP使用:

1. HttpMethod=GET : for querying

2. HttpMethod=POST : formutation (變動, modify)

三、型別

1. 基礎 Type (GraphQLScalarType):String、Int、Float、Boolean、ID

※ ID: 任何的 Int 或 String

2. 預設所有值可以是 null,指定不能為 null可在後面加上「!」,如:String!就代表不能為 null 的 String

3. List則是以[]表示,如:[Int]、[String!]!

4. ObjectType 物件型別,如:

type User {

name: String!

}

type Post {

id: ID!

author: User!

title: String!

body: String!

comments: [String!]!

}

Reference :

GraphQL 入門 Part I (至Part V)
2018 GraphQL 漸進式導入的架構
C#實作GraphQL API
GraphQL
GraphQL 名词解释
GraphQL 为何没有火起来?討論
如何實作 GraphQL API
Youtube影片 – Asp.Net Core Web Api with GraphQL
graphql.cn