当前位置: 首页 > 知识库问答 >
问题:

Python JSON REST框架,带有(de)serialiser和模式验证(jsonschema/avro)

贲言
2023-03-14

考虑到模式和(反)序列化框架的可用性,我认为构建一个能够实现以下功能的系统是很简单的:

  1. 它通过HTTP get请求接收输入
  2. 将其转换/解析/反序列化为python对象
  3. 验证给定公共模式语言描述的python对象
  4. 对参数进行一些操作以获取结果数据
  5. 将结果数据序列化为JSON
  6. 验证结果
  7. 归还它

我想使用一种语言不可知的模式语言——任何只在一种语言中使用的语言。我将avro和json模式视为模式语言和(反)序列化的生态系统,但到目前为止,我找不到任何能够满足这一需求的工具。一个特别的问题是反序列化。有些库进行序列化,但URL GET参数以字符串而不是整数的形式出现问题。

?name=Mickey

给定一个模式(avro)

{
"type": "record",
"name": "User",
"namespace": "example.avro",
"fields": [
    {
    "name": "name",
    "type": "string"
    },
    {
    "name": "age",
    "type": "int"
    }
]
}

我想得到一个判决(姓名='米奇',年龄=4)。

我已经浪费了很多时间来尝试不同的工具和框架,现在我正在考虑从头开始编写一个反序列化器。

共有3个答案

卓星波
2023-03-14

我想到两件事。

首先,有一个Eve REST框架,写在Flask的顶部。

作者还创建了一个名为Cerberus的模式/验证语言(并在Eve中使用),它完全满足您的需求。Eve将您的JSON存储在MongoDB中。

如果你的应用程序不是非常广泛,并且使用了Django现成的或打包的各种工具,我会坚持使用Eve。(哎呀,我不想在这里开始永恒的Django vs Flask火焰)

其次,Mongoengine库为JSON提供Django风格的模式。

它旨在成为MongoDB对Django的支持,其架构设计模仿Django。Mongoengine本身非常稳定,但它与尼斯Django REST框架Django REST框架Mongoengine的集成无论如何都不稳定。

此外,Mongoengine还与Eve和Flask绑定。

丁雅逸
2023-03-14

目前还不清楚序列化和反序列化的问题是什么。大多数web框架不会将URL查询参数视为JSON对象,而是将每个键单独处理,并允许您将查询字符串作为字典(或作为请求处理程序的参数,具体取决于框架)进行访问。类似于请求。查询['name']。JSON通常显示为POST、PUT、PATCH的有效负载,以及请求的响应。即使在这种情况下,也可以将其作为字符串,并执行类似于json的操作。加载以获取Python数据结构,然后可以使用json模式或avro验证程序库自由验证这些数据结构。

娄利
2023-03-14

我到处找,没找到我要找的东西。Marshmallow等项目接近尾声。它们允许对模式进行规范,并提供序列化,但我希望使用jsonschema格式实现互操作性。

所以我围绕熊猫数据帧编写了自己的序列化器/反序列化器类,它代表数据。它有方法

  1. 用于从字典或json对象创建数据帧(反序列化)2。对于强制数据类型,
 类似资料:
  • 有人能帮助我了解如何使用RobotFramework通过JSON-Schema验证json响应吗? 理想情况下,通过http请求外部引用json-schema:示例http://api-bl-uk.northeurope.cloudapp.azure.com/api/v1/crm/schemas/contact 当我做测试的时候... 所以我似乎错过了一个相当基本的谜题: 找不到名为“Valida

  • 问题内容: 我曾经遇到过Java的验证框架,您在其中编写了一种方法来保护数据类型的完整性以及对该数据类型的任何CRUD操作的自动调用此方法。 有谁知道这个框架是什么?我只是想避免对附加到数据类型的每个CRUD方法进行重复验证。 问题答案: 这是Java验证库/框架的巨大列表-http: //java-source.net/open- source/validation

  • 主要内容:创建主页面:,创建视图:,创建动作:,配置文件:,此验证是如何工作的?,基于XML的验证:现在,我们将看看如何的Struts验证框架。在Struts的核心有验证框架,协助应用程序的运行规则来执行验证执行之前的操作方法。 通常是使用Javascript来实现客户端验证。但不应单独依赖于客户端验证。最佳实践表明,验证应引入各级应用程序框架。现在,让我们来看看两种方式添加验证我们的Struts项目。 在这里,我们将采取一个例子,Employee 将被捕获的姓名和年龄使用一个简单的页面,我们将

  • 本文向大家介绍详解ABP框架的参数有效性验证和权限验证,包括了详解ABP框架的参数有效性验证和权限验证的使用技巧和注意事项,需要的朋友参考一下 参数有效性验证 应用程序的输入数据首先应该被检验是否有效。输入的数据能被用户或其他应用程序提交。在Web应用中,通常进行2次数据有效性检验:包括客户端检验和服务端检验。客户端的检验主要是使用户有一个好的用户体验。 首先最好是在客户端检验其表单输入的有效性并

  • 在这里输入image description我有一个如下所示的json模式,我希望根据B和C的值将定义加载到D和E中,为此我已经编写了所有的条件。我使用json-schema-validator在应用程序中进行json模式验证。 javaCode看起来像

  • 根据Avro模式规范(适用于接头):https://avro.apache.org/docs/current/spec.html 如上所述,Unions使用JSON数组表示。例如,["null","string"]声明一个模式,该模式可以是null或string。 ( 请注意,当为类型为联合的记录字段指定默认值时,默认值的类型必须与联合的第一个元素匹配。 因此,对于包含“null”的联合,通常首先