1. 程式人生 > >邊學邊做,簡單的 GraphQL 實例

邊學邊做,簡單的 GraphQL 實例

isp 集合 product erl pan ssi multiple get 鍵值對

項目中有功能要調用 API,對方 API 用的是 GraphQL 實現,就簡單學了下,感嘆技術進步真快,Facebook 發明的這玩兒咋這麽牛逼,以前前端花很多時間看接口文檔,以及和後端溝通。現在想用什麽接口,傳什麽參數、返回什麽結果,自己去構建,不得不說是API的革命,GraphQL 的語法強大且靈活,IDE智能提示也很棒,入門容易、邊學邊用。

這裏用三個實例演示 GraphQL 應用:

用戶登錄

接收參數:app_key、賬戶名、密碼,參數通過變量賦值,登錄成功返回用戶基本信息和 Token
mutation 是根類型,UserLogin 是操作名稱可省略,後面括號內是參數聲明,Login 是字段對象相當於接口方法,後面括號內是參數賦值,大括號內是需要返回的對象結構和字段

在 GraphiQL 中編寫查詢字符串及調試(下圖)

技術分享圖片

查詢字符串

技術分享圖片
mutation UserLogin(
  $app_key: String!, 
  $account: String!, 
  $password: String!) {
  Login(app_key: $app_key, account: $account, password: $password) {
    user_id
    token
    user_info {
      user_account
      user_name
      user_nickname
      user_email
      mobile_number
      user_balance(product_id: Enum1)
    }
  }
}
GraphQL Query String

變量

技術分享圖片
{
  "app_key": "pxhd491b991k8q5",
  "account": "test001",
  "password": "123456"
}
GraphQL Variables

用戶提交

接收各種參數,通過變量賦值,執行成功返回一個字符串,在 GraphiQL 中編寫查詢字符串及調試(下圖)

技術分享圖片

用戶尚未登錄?因為接口要求登錄成功後,以後的請求都要在 Header 中帶上 Token,Edit HTTP Headers 即可

技術分享圖片

查詢字符串

技術分享圖片
mutation SubmitBetting($game_id: Int!, 
  $game_type_id: Int
!, $game_cycle_id: Int!, $bet_info: String!, $bet_mode: BetModeEnum, $bet_multiple: Int!, $bet_percent_type: BetPercentTypeEnum!, $is_follow: Boolean, $follow_commission_percent: Int, $follow_secret_type: Int ) { AddLotteryOrder( game_id: $game_id, game_type_id: $game_type_id, game_cycle_id: $game_cycle_id, bet_info: $bet_info, bet_mode: $bet_mode, bet_multiple: $bet_multiple, bet_percent_type: $bet_percent_type, is_follow: $is_follow, follow_commission_percent: $follow_commission_percent, follow_secret_type: $follow_secret_type) }
GraphQL Query String

變量

技術分享圖片
{
  "game_id":1,
  "game_type_id":1,
  "game_cycle_id": 1892309,
  "bet_info": "",
  "bet_mode": "TwoYuan",
  "bet_multiple": 1,
  "bet_percent_type": "NoPercentType",
  "is_follow": false,
  "follow_commission_percent": 0,
  "follow_secret_type": 0
}
GraphQL Variables

活動列表

接收一個條件對象 input,成功返回記錄列表,根類型是 query 可省略,在 GraphiQL 中編寫查詢字符串及調試(下圖)

技術分享圖片

查詢字符串,這個接口只有整形和布爾型查詢參數,我就沒使用變量(如果是字符串參數最好使用變量,因為參數值中含有引號,會引起查詢字符串語法錯誤,甚至註入風險)。

技術分享圖片
{
  ActivityList(input: {is_show_menu: True, page: 1, rows_of_page: 20}) {
    record {
      id
      title
      content
      web_title_img_url
      app_title_img_url
      web_menu_img_url
      app_menu_img_url
    }
  }
}
GraphQL Query String

通過 HTTP 提供服務

傳遞三個參數分別是:

query:查詢文檔,必填,我們之前在 GraphiQL 中已調試好。
variables:變量,選填,鍵值對集合。
operationName:操作名稱,選填,查詢文檔有多個操作時必填。

GET的話,放在 URL 參數中,格式:
?query=查詢語句&operationName=操作名稱&variables=變量集合

POST的話,首先在 Header 中聲明 Content-Type: application/json,正文 JSON 片段:
{
  "query": "{viewer{name}}", //查詢字符串
  "operationName": "", //操作名稱,選填,查詢文檔有多個操作時必填
  "variables": { "name": "value", ... } //對象集合,選填
}

下面截圖是在 Postman 中調試接口

技術分享圖片

看上去沒問題,可以將HTTP請求封裝,放進項目中

我只學了些皮毛,當然一般的項目也不會用太復雜的語法,以後有機會再學學服務端的配置。

邊學邊做,簡單的 GraphQL 實例