我尝试使用 F# 从 grqphql 端点获取一些数据。 我使用 Fsharp.Data
let apiQuery = """query findData {
apiData(Model:{
PageNumber: 1,
PageSize: 100
})
{
ErrorMessage Success ValidationResult TotalCount
Data{
ItemId
}
}
}"""
let queryGraphQl () =
Http.RequestString
( apiUrl,
headers = [ ContentType HttpContentTypes.Json;
Authorization ("bearer " + token)
],
body =
TextRequest apiQuery
)
但我得到 (500) Internal Server Error
在 Python 中同样可以正常工作:
query_headers = {
"Authorization": 'bearer %s' % token,
'Content-Type': 'application/json'
}
response = requests.post(url, json={'query': apiQuery}, headers=query_headers)
对我缺少的东西有什么建议吗?
在邮递员中我必须添加 Content-Length 和 Host 喜欢在发送请求时计算。
答案 0 :(得分:0)
看起来 F# 和 Python 代码并不等效。 Python 代码在负载中包含额外的 query
关键字。
我不知道您的特定端点的具体情况,但我使用公共接口之一编写了类似的代码。
open System.Net
open FSharp.Data
open FSharp.Data.HttpRequestHeaders
let key = "********-****-****-****-*************"
let uri k = $"https://api.everbase.co/graphql?apikey={k}"
let gurl = uri key
let apiQuery = """{ "query" :
"{ client { ipAddress { country { name } city { name } } } }"
}"""
let connectToGraph apiUrl apiQuery =
try
let res = Http.RequestString( url = apiUrl, httpMethod="POST", body = TextRequest apiQuery, headers = [ ContentType HttpContentTypes.Json; UserAgent "mozilla" ])
res
with
| _ as ex -> ex.Message
[<EntryPoint>]
let main argv =
let res = connectToGraph gurl apiQuery
printf "Response: %A" res
0
我想您应该使用 query
将 F# 代码中的 ':'
与定义的其余部分分开。此外,实际的负载应该用引号/双引号括起来以形成有效的 Json 值。