F# 向 graphql 端点发出 API 请求
F# making a API request to a graphql endpoint
我尝试使用 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)
有什么我遗漏的建议吗?
在 Postman 中我必须添加
Content-Length 和 Host 喜欢在发送请求时计算。
F# 和 Python 代码似乎并不等效。 Python 代码在负载中包含额外的 query
关键字。
我不知道您的特定端点的细节,但我使用 public 接口之一编写了类似的代码。
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
与定义的其余部分分开。此外,实际有效负载应包含在 quotes/double 引号中以形成有效的 Json 值。
我尝试使用 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)
有什么我遗漏的建议吗?
在 Postman 中我必须添加 Content-Length 和 Host 喜欢在发送请求时计算。
F# 和 Python 代码似乎并不等效。 Python 代码在负载中包含额外的 query
关键字。
我不知道您的特定端点的细节,但我使用 public 接口之一编写了类似的代码。
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
与定义的其余部分分开。此外,实际有效负载应包含在 quotes/double 引号中以形成有效的 Json 值。