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

这不会验证模式,但会尽量满足给定输入。