F#向graphql端点发出API请求



我试图用F#从grqphql端点获取一些数据。我使用Fsharp数据

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)

有什么建议我缺少的吗?

在Postman中,我必须添加发送请求时,需要计算内容长度和主机。

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

我想您应该用':'将F#代码中的query与定义的其余部分分开。此外,实际负载应该用引号/双引号包装,以形成有效的Json值。

最新更新