Python 如何协调REST和JSONschema?
我正在启动一个新项目,该项目包含一个带有pyramid/python后端的ExtJS6应用程序 由于这种架构,后端将只提供一个RPC,而不会直接为任何页面提供服务。我对这样一个东西的实现通常基于REST,并且非常适合这个CRUD应用程序 关于数据验证,我想从我一直觉得尴尬的Colander/Peppercorn转向更简单、更精简的jsonschema 这里的想法是将各种请求的所有参数(在这种情况下减去url中包含的id)移动到一个json主体中,jsonschema可以轻松处理该主体 这里的主要问题是GET请求不应该有一个主体,我肯定想在其中放入参数(过滤器、分页等) 可能有一些方法可以使用REST或REST,比如JSONschema,但我在web上找不到任何东西Python 如何协调REST和JSONschema?,python,rest,extjs,pyramid,jsonschema,Python,Rest,Extjs,Pyramid,Jsonschema,我正在启动一个新项目,该项目包含一个带有pyramid/python后端的ExtJS6应用程序 由于这种架构,后端将只提供一个RPC,而不会直接为任何页面提供服务。我对这样一个东西的实现通常基于REST,并且非常适合这个CRUD应用程序 关于数据验证,我想从我一直觉得尴尬的Colander/Peppercorn转向更简单、更精简的jsonschema 这里的想法是将各种请求的所有参数(在这种情况下减去url中包含的id)移动到一个json主体中,jsonschema可以轻松处理该主体 这里的主要
编辑:有人在GET HTTP请求中提到了关于body的问题。虽然在GET HTTP请求中添加一个主体在某种程度上是可能的,但它违反了HTTP 1.1规范的一部分,因此这不是解决此问题的方法。我不明白为什么需要执行任何特定的操作。In-Pylons返回querystring中参数的字典(实际上是一个MultiDict,但基本上是一样的)。您可以轻松地将其转换为JSON或直接传递给模式验证。如果我理解正确,您希望使用JSON模式进行输入验证,但您正在努力找出如何以RESTful方式使用JSON模式验证查询参数 不幸的是,没有一个明确的答案。JSON模式并不是为此而设计的。以下是我在使用REST和JSON模式的工作中考虑的选项
选项3主要是一个笑话,但严肃地说,REST或HTTP中没有任何内容表明帖子只能用于创建。事实上,它是HTTP方法中最灵活、最通用的方法。把它想象成一个做某事的工厂。某个东西可以生成并存储一个新资源,或者只是返回它。如果您发现需要发送大量查询参数,那么这可能不是一个简单的GET。我的经验法则是,如果结果本质上是不可缓存的,那么帖子可能更合适(或者至少不是不合适) 最干净的方法是将JSON字符串放在单个查询参数中。如果您有一个JSON模式来验证它,那么客户机可以使用相同的JSON模式,因此已经拥有JSON格式的数据
http://example.net/some/model/1?query={“foo”:1,“bar”:[“baz”,“qux”]}
如果出于某种原因不喜欢在查询中使用JSON,可以使用标准转换查询参数,但根据语言和框架/库的不同,有一些做法
示例:http://example.net/some/model/1?foo=1,bar[]=baz,bar[]=qux
对于新用户来说,这可能看起来更干净,但如果客户端使用不同的lib/语言来查询JSON,则会更加困难。可能会重复“不”,但事实并非如此。您可以在HTTP get请求中获取正文。它在某些情况下会起作用,但这不是我想要做的,因为它似乎是一个坏黑客。NestedMultiDict与dict“基本上不是同一件事”。它可以为同一个键提供多个值,您可以很容易地看到这是如何无法做到的:a)直接转换为dict B)直接验证为JSON文件orry,我根本看不到这一点。MultiDict有一个方法,返回一个dict,其中每个键都是一个列表;这是完全正确的JSON。是的,我同意你的分析。然而,我们还远远没有找到一个适当的解决办法。我们希望有一个RESTful形式的完整jsonic api,但这两件事并不简洁,至少不完美。