Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何协调REST和JSONschema?_Python_Rest_Extjs_Pyramid_Jsonschema - Fatal编程技术网

Python 如何协调REST和JSONschema?

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可以轻松处理该主体 这里的主要

我正在启动一个新项目,该项目包含一个带有pyramid/python后端的ExtJS6应用程序

由于这种架构,后端将只提供一个RPC,而不会直接为任何页面提供服务。我对这样一个东西的实现通常基于REST,并且非常适合这个CRUD应用程序

关于数据验证,我想从我一直觉得尴尬的Colander/Peppercorn转向更简单、更精简的jsonschema

这里的想法是将各种请求的所有参数(在这种情况下减去url中包含的id)移动到一个json主体中,jsonschema可以轻松处理该主体

这里的主要问题是GET请求不应该有一个主体,我肯定想在其中放入参数(过滤器、分页等)

可能有一些方法可以使用REST或REST,比如JSONschema,但我在web上找不到任何东西


编辑:有人在GET HTTP请求中提到了关于body的问题。虽然在GET HTTP请求中添加一个主体在某种程度上是可能的,但它违反了HTTP 1.1规范的一部分,因此这不是解决此问题的方法。

我不明白为什么需要执行任何特定的操作。In-Pylons返回querystring中参数的字典(实际上是一个MultiDict,但基本上是一样的)。您可以轻松地将其转换为JSON或直接传递给模式验证。

如果我理解正确,您希望使用JSON模式进行输入验证,但您正在努力找出如何以RESTful方式使用JSON模式验证查询参数

不幸的是,没有一个明确的答案。JSON模式并不是为此而设计的。以下是我在使用REST和JSON模式的工作中考虑的选项

  • 将查询参数转换为JSON,然后根据模式进行验证
  • 将JSON填充到查询参数中,并验证该参数的值。(即/foo/1?参数={“页面”:2,“每页”:10})
  • 当别人告诉你做错事时,用POST代替用手指捂住耳朵。他们到底知道些什么
  • 我更喜欢选项1,因为它是惯用的HTTP

    选项2可能是最容易在后端使用的,但它很脏


    选项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,但这两件事并不简洁,至少不完美。