gpt4 book ai didi

python - 如何协调 REST 和 JSONschema?

转载 作者:太空宇宙 更新时间:2023-11-03 17:22:31 24 4
gpt4 key购买 nike

我正在启动一个新项目,其中包含带有 Pyramid/Python 后端的 Extjs 6 应用程序。

由于这种架构,后端仅提供 RPC,不会直接提供任何页面服务。我对此类事情的实现通常基于 REST,并且非常适合这个 CRUD 应用程序。

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

这里的想法是将各种请求的所有参数(在这种情况下减去 url 中包含的 id)移动到 json 正文中,以便可以通过 jsonschema 轻松处理。

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

可能有一些 REST 或类似 REST 和 JSONschema 的方法,但我无法在网络上找到任何内容。

编辑:有人提到了 GET HTTP 请求中有关正文的问题。虽然在 GET HTTP 请求中放入正文在某种程度上是可能的,但它违反了 HTTP 1.1 规范的一部分,因此这不是此问题的解决方案。

最佳答案

如果我理解正确的话,您想使用 JSON Schema 进行输入验证,但您正在努力弄清楚如何以 RESTful 方式使用 JSON Schema 验证查询参数。

不幸的是,没有明确的答案。 JSON Schema 并不是为此而设计的。以下是我在使用 REST 和 JSON 架构时考虑过的选项。

  1. 将查询参数转换为 JSON,然后根据架构进行验证
  2. 将 JSON 填充到查询参数中并验证该参数的值。 (即/foo/1?params={"page": 2, "perPage": 10})
  3. 使用 POST 而不是 GET,当人们告诉你 REST 方法不对时,你可以用手指捂住耳朵。他们到底知道什么。

我更喜欢选项 1,因为它是惯用的 HTTP。

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

选项 3 主要是一个笑话,但严肃地说,REST 或 HTTP 中没有任何内容表明 POST 只能用于创建。事实上,它是 HTTP 方法中最灵活、最通用的。把它想象成一个做某事的工厂。某些东西可以生成并存储新资源或只是返回它。如果您发现需要发送大量查询参数,那么它可能并不是一个简单的 GET。我的经验法则是,如果结果本身不可缓存,则 POST 可能更合适(或者至少不是不合适)。

关于python - 如何协调 REST 和 JSONschema?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32995454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com