-
Notifications
You must be signed in to change notification settings - Fork 66
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
API 支持多字段&多值的匹配查询能力 #135
Comments
https://emergencyexit.xyz/use-graphql-with-django.html 经过一段时间的调研和尝试,觉得当前还不适合引入 GraphQL,我们仍旧走 REST 协议扩展的路子 |
原有的 v2 版本 API 有一些既有的协议限制,将新启一个 API 版本 (v3) 处理 和 v2 一样,以 profile 对象为例,适用于所有对象 拉取对象列表支持直接添加字段过滤列表,条件之间仅支持交集
支持类 Django ORM 查询功能查询字段列表
模糊查询
限制返回字段通过
获取单个对象详情与 v2 不同的是,路径参数不再是动态可选,而是针对不同对象支持有限的枚举,类似 profile 对象仅支持
多对多过滤除了普通字段,需要额外支持多对多字段过滤能力,仅支持通过关联对象的 id 查询
这里再举一个 department 对象的例子
排序和 v2 一致,我们默认以 "-create_time" 排序,请求时可以通过
分页和 v2 不同,相较于 {
"results": [...],
"next":"http://localhost:8004/api/v3/profiles/?cursor=cD0yMDIxLTAxLTI2KzAzJTNBNTQlM0E0MS4yMDQ4NTclMkIwMCUzQTAw&_fields=username",
"previous": null
} 返回值返回值将以 Http Status Code 来标识请求状态。正常返回为 {
"code": "PERMISSION_DENIED",
"detail": "request failed, please check api log of bk-user"
} 当出现 |
一些想法:
|
|
|
|
目前我们主要通过 restAPI 来实现数据拉取,例如
聚焦单个字段,查询多个值
聚焦多个字段,查询同一个值
二者针对不同场景覆盖了大部分数据查询需求,当然也有例外。当前存在需求 #73 ,我们要在 SaaS 中通过 API 针对用户的多个字段添加不同的过滤条件,上述两种查询都无法满足。
由于我们采用的 “轻客户端” 的做法,不太适合在 SaaS 中拼接过于复杂的多次查询,所以我们仍旧需要在 API 层完成这样的查询,以 restAPI 的形式来理解,应该长这个样子
但是存在一些明显的问题:
所以虽然我们的模型比较简单,但是不影响引入一些其他的查询思路,例如 graphql ? (社区也有 Django graphql 整合)
如果有其他更好的思路,欢迎留言
The text was updated successfully, but these errors were encountered: