如何校验 JSON 数据?

2016-07-06 22:14:54 +08:00
 guyskk

现在的情况是前后端分离,后端只提供 API ,前端 AJAX 调用,使用 JSON 格式传送数据。 这里涉及到 2 个问题:
(1)如何描述 API?如何告诉前端你的接口需要什么参数,返回什么?
(2)如何校验 JSON 数据?前端可能漏了参数,或是传了错误的参数。用户可能输入错误,需要有错误提示。黑客也可能构造非法的参数进行攻击。

考虑过用 JSON-Schema ,但是 JSON-Schema 太复杂了,写起来也很累,用来描述 API 并不合适,我想要一种易读易写的格式,写完可以直接拿来当文档看。

另外关于防攻击的: https://github.com/pallets/flask/issues/1421
如果提交大量嵌套非常深的数据,服务器资源不是很容易就会耗尽吗,例如: json.loads('[' * 800 + ']' * 800)

求前人指路,分享经验。

4880 次点击
所在节点    编程
12 条回复
loading
2016-07-06 22:20:26 +08:00
了解一下: Restful api
guyskk
2016-07-06 22:23:31 +08:00
@loading 是 Restful api ,但也需要写文档描述请求参数和返回值吧
loading
2016-07-06 22:25:41 +08:00
cuebyte
2016-07-06 22:44:19 +08:00
JSON 校验好像只有 json schema 吧,文档的话可以看看 swagger 和 raml
guyskk
2016-07-06 22:48:48 +08:00
@loading 麻烦先看明白题目,谢谢。

这是你发的链接里关于文档的内容,泛泛而谈:
```
文档

文档和 API 本身一样重要。文档应该容易找到,并且公开(把它们藏到 pdf 里面或者存到需要登录的地方都不太好)。文档应该有展示请求和输出的例子:或者以点击链接的方式或者通过 curl 的方式(请见 openstack 的文档)。如果有更新(特别是公开的 API ),应该及时更新文档。文档中应该有关于何时弃用某个 API 的时间表以及详情。使用邮件列表或者博客记录是好方法。
```
这种跟话题没关系的文章,麻烦不要随随便便就丢过来。
guyskk
2016-07-06 22:51:33 +08:00
@cuebyte swagger 了解过,也挺复杂的。 RAML 我先了解一下再说。
bdbai
2016-07-06 23:49:23 +08:00
(1) 什么都不要写,问问你的前端需要什么;
(2) 用你自己的轮子嘛。
loading
2016-07-07 07:04:34 +08:00
@guyskk 我没乱丢链接…
你连你 api 需要提供什么都不知道,我不提供入门级资料还能提供啥?况且,你问题里都没提到 restful api 所以,我认为你还是不了解的。
loading
2016-07-07 07:06:43 +08:00
既然你知道设计成 restful 风格很好,自己深挖这方面资料就行。
guyskk
2016-07-07 07:40:05 +08:00
@bdbai 唉,自己的轮子不够好用,算法很复杂很难实现,所以想问问各位的经验,实际项目中是怎么做的?
shyling
2016-07-07 08:25:05 +08:00
第一个直接参考 V2EX 的 api 介绍
第二个方便的方法是将 json 映射为 Model ,类型匹配上进行校验。该是 Number 的不能是 String 。
lijinma
2016-07-07 09:48:27 +08:00
多年后,你还是会需要一个类似 swagger 的东西。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/290735

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX