和主管为一个接口输出真吵了一天,搞得都想离职,求怎么破 https://www.v2ex.com/t/546096?p=1
JSON API 1.0 规范 官网第一句话:“ If you ’ ve ever argued with your team about the way your JSON responses should be formatted, JSON:API can be your anti-bikeshedding tool.” “如果你和你的团队曾经争论过使用什么方式构建合理 JSON 响应格式, 那么 JSON API 规范就是你的核武器。”
最近开发一个 CRM 项目,后端 API 服务器一开始在Flask-Restful和Flask-Restless之间纠结,由于 Flask-Restful 封装程度低,需要自己实现的功能太多;纠结地选择了数据库映射型框架Flask-Restless,这个框架至少实现了 JSON API 1.0 规范。可结果发现是个天坑!!外键查询,只能逐条查询,不支持联表或自定义查询方式! Github issue 里 2016 年就有人反应过这个问题,作者也表示是设计架构问题,无能为力。
绝望,感觉要自己徒手造个摩天轮了。
曙光,就在这个 issue 下面,有人表示已经将项目完整迁移到 Flask-REST-JSONAPI,一个完全陌生的框架,至少国内完全搜不到这个框架。
我查了下,**文档齐全!规范标准!层次清晰!拓展容易!**感觉就是 Flask 中的 Flask。
框架遵循 Restful JSON API 1.0 规范,意味着在客户端也有实现该规范的轮子可以用!而且 Flask-REST-JSONAPI 这个框架真的好用到爆炸!作者一句话总结他的框架:
"It combines the power of Flask-Restless and the flexibility of Flask-RESTful around a strong specification JSONAPI 1.0."
结合了 Flask-Restless 的能力和 Flask-RESTful 的灵活性,并且严格遵守 JSONAPI 1.0 规范。
写完了一个项目,总结下这个框架优点:
层次清晰:框架内部分为资源层、逻辑数据抽象层(数据结构层)和数据库层。
例:一个 PATCH 请求,先从 Flask 路由层 users/me 映射到自定义的资源层 user_detail_resource
;再经过资源层对应的数据结构层 user_schema
,Schema 定义了 api 的数据结构,验证数据是否规范、完整,并反序列化把数据变成 Python 对象;再将 Python 对象传入数据层,更新数据;最后更新完成后,再返回给数据结构层 user_schema
序列化,把 Python 对象变成 JSON 数据,并将更新后的完整数据返回客户端。
可定制程度高:在数据结构层,框架使用的是 Marshmallow-jsonapi 进行序列化和反序列化;如果你们有自己独特的 JSON 数据规范,也可以自己定制自己的序列化包;在数据库层,框架实现了 Sqlalchemy 的增删改查,其实只要实现了基类的接口,你可以使用自己的数据库层,为专门的资源做专门 sql 优化,甚至替换任何数据库或 ORM。
拓展性强:框架在资源层和数据库都预留了 before、after 的钩子函数,比如before_post
,before_create_object
;而且预留了统一的权限钩子。
文档齐全:仅依靠官方文档,完全可以开始自己的项目。
规范标准:框架完全实现了 JSONAPI 1.0 规范,实现了条件查询、外键查询、按需查询、排序和分页。
# 条件查询:查询名字叫 John 的人
GET /persons?filter=[{"name":"name","op":"eq","val":"John"}]
# 外键查询:查询结果包含外键 Computers
GET /persons/1?include=computers
# 按需查询: 仅返回人的名字
GET /persons?fields[person]=display_name
# 排序:结果按年龄排序
GET /persons?sort=age
作为回馈,近期我将启动文档翻译工作,希望如此优质的框架和规范能被更多人用上。
1
di94sh 2019-03-31 01:08:37 +08:00 via Android
flask restful 注册错误处理是是失效的。
|
2
lynskylate 2019-03-31 02:06:13 +08:00 via Android
相比 django rest framework 如何?
|
3
ryd994 2019-03-31 02:40:29 +08:00 via Android
主管拒绝接受此规范
|
4
congeec 2019-03-31 03:46:55 +08:00
程序员拒绝接受此规范
|
5
plqws 2019-03-31 06:31:02 +08:00
Patreon 的 API 就是这个规范的,其实用起来挺让人奔溃的,看起来不错而已,实际用起来的话会发现极其不灵活
|
6
Abbeyok 2019-03-31 07:27:11 +08:00 via Android
API 用 jsonify 咋样?
|
7
jisibencom 2019-03-31 08:29:15 +08:00 via Android
不是太懂,现在接口太多,如何灵活调用有没有通用的软件或工具,php,python
|
8
forestLittleBear 2019-03-31 09:19:17 +08:00 via Android
@jisibencom 官方文档。
|
9
TommyLemon 2019-03-31 18:55:47 +08:00
先收藏一下
|
10
nuance2ex OP @lynskylate django rest 对标的是 flask-restful。从灵活度的角度来说,可以自由拓展;但灵活性的另一面就是封装程度低,什么都要自己实现。
|
11
nuance2ex OP @plqws 这个规范返回的 JSON 数据层次比较冗余,客户端直接提数据比较麻烦,最好用实现该规范的反序列解析器。我自己写完客户端解析器后,发现其实已经有现成的 JS 轮子了。
|