F#- Как мы можем проверить всю схему ответа API с помощью HttpFs.Client или Hopac?
У меня есть тест, в котором после получения ответа я хотел бы проверить всю схему ответа (а не сравнение отдельных узлов ответа / значений).
Образец теста:
[<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
Есть ли способ сохранить где-нибудь ожидаемую схему, и как только я получу ответ, я провожу сравнение, чтобы проверить, что ответ имеет такое же количество узлов (ни меньше, ни больше, чем ожидаемая схема)?
Я могу выбрать другие библиотеки, такие как FSharp.Data, если у нас нет прямого пути в HttpFs.Client. Я посмотрел на FSharp.Data (https://fsharp.github.io/FSharp.Data/library/JsonProvider.html), но не смог выяснить, насколько он соответствует требованиям, в которых сравнение схемы должно выполняться с сохраненным ExpectedSchemaJson=ResponseJson.
1 ответ
Ты можешь использовать 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
Это не будет проверять схему, но будет пытаться соответствовать как можно лучше с учетом входных данных.