1. graphql是什麼?
graphql是facebook 在2023年開發的,2023年開源,2023年下半年facebook宣布可以在生產環境使用,而其內部早就已經廣泛應用了,用於替代 rest api。facebook的解決方案和簡單:用乙個「聰明」的節點來進行複雜的查詢,將資料按照客戶端的要求傳回去,後端根據graphql機制提供乙個具有強大功能的介面,用以滿足前端資料的個性化需求,既保證了多樣性,又控制了介面數量。
graphql並不是一門程式語言或者框架,它是描述你的請求資料的一種規範,是協議而非儲存,graphql本身並不直接提供後端儲存的能力,它不繫結任何的資料庫或者儲存引擎,它可以利用已有的**和技術來進行資料來源管理。
乙個graphql查詢是乙個被發往服務端的字串,該查詢在服務端被解釋和執行後返回json資料給客戶端。
2. graphql和rest api的對比
restful:服務端決定有哪些資料獲取方式,客戶端只能挑選使用,如果資料過於冗餘也只能默默接收再對資料進行處理;而資料不能滿足需求則需要請求更多的介面。
graphql:給客戶端自主選擇資料內容的能力,客戶端完全自主決定獲取資訊的內容,服務端負責精確的返回目標資料。提供一種更嚴格、可擴充套件、可維護的資料查詢方式。
3. graphql在go語言中使用
1.定義 graphql 使用者型別usertype; fields為user引數
/*定義 graphql 使用者型別usertype; fields為user引數
*/varusertype = graphql.newobject(
graphql.objectconfig,
"name": &graphql.field,
},},
)
2.定義graphql 查詢型別 resolve 通過id 獲取使用者資訊
/*定義graphql 查詢型別 resolve 通過id 獲取使用者資訊
*/varquerytype = graphql.newobject(
graphql.objectconfig,
},resolve:func(p graphql.resolveparams) (inte***ce{},
error)
returnnil, nil
},},},
})
3.定義 graphql schemad物件
varschema, _ = graphql.newschema(graphql.schemaconfig,
)
4.執行查詢方法
funcexecutequery(query string, schema graphql.schema) *graphql.result )
iflen(result.errors) > 0
returnresult
}
5.main 函式執行:
4. 結果輸出,總結
遊覽器輸入:
輸出結果:}}
使用 graphql 再也不需要對介面的文件進行維護了。
請求行,請求頭,請求體
1.請求報文 請求行 請求頭 請求資料 空行 請求行求方法字段 url欄位和http協議版本 例如 get index.html http 1.1 get方法將資料拼接在url後面,傳遞引數受限 請求方法 get post head put delete options trace connect ...
請求行 請求頭 請求體
請求行 是請求方法,get和post是最常見的http方法,除此以外還包括delete head options put trace。為請求對應的url位址,它和報文頭的host屬性組成完整的請求url。是協議名稱及版本號。請求頭 是http的報文頭,報文頭包含若干個屬性,格式為 屬性名 屬性值 服...
請求行 請求頭與請求體
請求行 請求頭與請求體可以通過httpwatch檢視 請求行,則為第一行,其中包括 get或post url http版本 注意 url的資訊必須是已經urlencoded編碼後的 瀏覽器不會自動編碼 否則將不符合要求,如 中文 請求頭,則第二行之後的資訊,可以在 httpconext.reques...