F#- 我们如何使用 HttpFs.Client 或 Hopac 验证 API 响应的整个模式?
F#- How can we validate the whole schema of API response using HttpFs.Client or Hopac?
我有一个测试,在收到响应后我想验证响应的整个模式(不是单个响应 node/value 比较)。
样本测试:
[<Test>]
let howtoValidateSchema () =
let request = Request.createUrl Post "https://reqres.in/api/users"
|> Request.setHeader (Accept "application/json")
|> Request.bodyString """{"name": "morpheus",
"job": "leader"}"""
|> Request.responseAsString
|> run
有没有一种方法可以将我预期的模式保存在某个地方,一旦我得到响应,我就会进行比较以检查响应是否具有相同数量的节点(既不少于也不多于预期模式)?
如果 HttpFs.Client 中没有直接的方式,我可以选择 FSharp.Data 等其他库。我查看了 FSharp.Data (https://fsharp.github.io/FSharp.Data/library/JsonProvider.html) 但无法找到它如何满足需要使用 savedExpectedSchemaJson=ResponseJson 进行模式比较的要求。
您可以使用Newtonsoft.Json.Schema
来验证模式:
open Newtonsoft.Json.Schema
open Newtonsoft.Json.Linq
let schema = JSchema.Parse expectedSchema
let json = JObject.Parse responeJson
let valid = json.IsValid schema
但是,这假定您在某处预定义了架构。如果您没有这样的架构,最好使用 JsonProvider,他可以为您推断。
运行 手动调用并将结果保存在 sample.json 文件中并使用 JsonProvider 创建类型:
type ResponseSchema = JsonProvider<"sample.json">
并且你可以使用这个类型来解析任何基于样本的新内容(前提是样本具有代表性。
ResponseSchema.parse response
这不会验证模式,但会尽量满足给定输入。
我有一个测试,在收到响应后我想验证响应的整个模式(不是单个响应 node/value 比较)。
样本测试:
[<Test>]
let howtoValidateSchema () =
let request = Request.createUrl Post "https://reqres.in/api/users"
|> Request.setHeader (Accept "application/json")
|> Request.bodyString """{"name": "morpheus",
"job": "leader"}"""
|> Request.responseAsString
|> run
有没有一种方法可以将我预期的模式保存在某个地方,一旦我得到响应,我就会进行比较以检查响应是否具有相同数量的节点(既不少于也不多于预期模式)?
如果 HttpFs.Client 中没有直接的方式,我可以选择 FSharp.Data 等其他库。我查看了 FSharp.Data (https://fsharp.github.io/FSharp.Data/library/JsonProvider.html) 但无法找到它如何满足需要使用 savedExpectedSchemaJson=ResponseJson 进行模式比较的要求。
您可以使用Newtonsoft.Json.Schema
来验证模式:
open Newtonsoft.Json.Schema
open Newtonsoft.Json.Linq
let schema = JSchema.Parse expectedSchema
let json = JObject.Parse responeJson
let valid = json.IsValid schema
但是,这假定您在某处预定义了架构。如果您没有这样的架构,最好使用 JsonProvider,他可以为您推断。
运行 手动调用并将结果保存在 sample.json 文件中并使用 JsonProvider 创建类型:
type ResponseSchema = JsonProvider<"sample.json">
并且你可以使用这个类型来解析任何基于样本的新内容(前提是样本具有代表性。
ResponseSchema.parse response
这不会验证模式,但会尽量满足给定输入。