现在的情况是前后端分离,后端只提供 API ,前端 AJAX 调用,使用 JSON 格式传送数据。
这里涉及到 2 个问题:
(1)如何描述 API?如何告诉前端你的接口需要什么参数,返回什么?
(2)如何校验 JSON 数据?前端可能漏了参数,或是传了错误的参数。用户可能输入错误,需要有错误提示。黑客也可能构造非法的参数进行攻击。
考虑过用 JSON-Schema ,但是 JSON-Schema 太复杂了,写起来也很累,用来描述 API 并不合适,我想要一种易读易写的格式,写完可以直接拿来当文档看。
另外关于防攻击的: https://github.com/pallets/flask/issues/1421
如果提交大量嵌套非常深的数据,服务器资源不是很容易就会耗尽吗,例如: json.loads('[' * 800 + ']' * 800)
。
求前人指路,分享经验。
1
loading 2016-07-06 22:20:26 +08:00 via Android
了解一下: Restful api
|
3
loading 2016-07-06 22:25:41 +08:00 via Android
|
4
cuebyte 2016-07-06 22:44:19 +08:00 1
JSON 校验好像只有 json schema 吧,文档的话可以看看 swagger 和 raml
|
5
guyskk OP @loading 麻烦先看明白题目,谢谢。
这是你发的链接里关于文档的内容,泛泛而谈: ``` 文档 文档和 API 本身一样重要。文档应该容易找到,并且公开(把它们藏到 pdf 里面或者存到需要登录的地方都不太好)。文档应该有展示请求和输出的例子:或者以点击链接的方式或者通过 curl 的方式(请见 openstack 的文档)。如果有更新(特别是公开的 API ),应该及时更新文档。文档中应该有关于何时弃用某个 API 的时间表以及详情。使用邮件列表或者博客记录是好方法。 ``` 这种跟话题没关系的文章,麻烦不要随随便便就丢过来。 |
7
bdbai 2016-07-06 23:49:23 +08:00 via Android 1
(1) 什么都不要写,问问你的前端需要什么;
(2) 用你自己的轮子嘛。 |
8
loading 2016-07-07 07:04:34 +08:00 via Android
@guyskk 我没乱丢链接…
你连你 api 需要提供什么都不知道,我不提供入门级资料还能提供啥?况且,你问题里都没提到 restful api 所以,我认为你还是不了解的。 |
9
loading 2016-07-07 07:06:43 +08:00 via Android
既然你知道设计成 restful 风格很好,自己深挖这方面资料就行。
|
10
guyskk OP @bdbai 唉,自己的轮子不够好用,算法很复杂很难实现,所以想问问各位的经验,实际项目中是怎么做的?
|
11
shyling 2016-07-07 08:25:05 +08:00 via Android 1
第一个直接参考 V2EX 的 api 介绍
第二个方便的方法是将 json 映射为 Model ,类型匹配上进行校验。该是 Number 的不能是 String 。 |
12
lijinma 2016-07-07 09:48:27 +08:00
多年后,你还是会需要一个类似 swagger 的东西。
|