不是全部不顺手,而是参数写法
举个例子
获取张三写的文章
GET /aticle/writer/zhangsan
获取张三写的名叫 演员的自我修养 的文章
GET /aticle/writer/zhangsan/name/演员的自我修养
那参数里面有平级的怎么办?
获取张三写的名叫 演员的自我修养 和 编程宝典 这两文章
GET ????
网上列子大多是参数上下级的关系,那上下级和平级混合,那岂不是规则无法统一?甚至还有那些参数个数不确定的?
干脆要不要只取 restful 风格的一部分,只抽象成名词,参数还是传统的 url?arg1=xxx&arg2=yyy 这样好点?
1
2067 2019-07-05 00:26:21 +08:00
你这个不叫 restful 接口,restful 的查询都是放在 json 里面的...
|
3
2067 2019-07-05 00:30:16 +08:00
正常的我理解的 restful,再包含多个属性的情况下应该是放在请求内容当中查询,只有完全非常清晰的树形结构才会用你写的这样的方式
GET /article { "writer":"zhangsan" xxxx:xxxx } 如此返回一个或者一组 ID 之后,再按 ID 去 GET |
4
sls 2019-07-05 00:33:52 +08:00
反正我用着不爽,但还得用,因为你不用,领导觉得不行
|
5
chinvo 2019-07-05 00:35:47 +08:00 via iPhone
restful 又不是说完全没 query parameters
这种场景可以考虑把过滤器编码(如 JSON/url encode )之后作为 get 参数或者 post body |
6
2067 2019-07-05 00:36:24 +08:00
@51300520 这种分层的结构适合于,每一层只有一种分类规则,而且不会发生交叉和重复的情况,而在这个情况下,一般是不需要特别指定参数的名字的
比如按照树形划分第一层是作者第二层是作品类型第三层是作品名称,那么就是 /article/zhangsan/action/演员的自我修养 /article/zhangsan/programming/编程宝典 /article/lisi/novel/xxxx 如果还有其他平级的分类标准,就不适合这样的分层,事实上无论是作者还是作品名或者作品类型其实都可以作为可选属性,比如 name:zhansan type:programming year:2008 name:编程宝典 这样的时候,应该是把这些属性存储起来,通过请求体里面的内容去查找,最终用 id 来获取 |
7
df4VW 2019-07-05 00:39:05 +08:00
演员的自我修养只是 article 这个 resource 的一个属性,没有特殊设计的话,做 query 的一部分就好了
restful 的中心是 resources 获取张三写的文章 GET /writers/zhangsan/articles 获取张三写的名叫 演员的自我修养 的文章 GET /writers/zhangsan/articles?names= 获取张三写的名叫 演员的自我修养 和 编程宝典 这两文章 GET /writers/zhangsan/articles?names[]=演员的自我修养&names[]=编程宝典 |
8
51300520 OP 哎,用着别扭啊
|
9
FrankFang128 2019-07-05 01:02:49 +08:00
获取张三写的文章
GET /articles?author=张三 获取张三写的名叫 演员的自我修养 的文章 GET /articles?author=张三&title=演员的自我修养 获取张三写的名叫 演员的自我修养 和 编程宝典 这两文章 GET /articles?author=张三&title[]=演员的自我修养&title[]=编程宝典 |
10
catror 2019-07-05 01:03:23 +08:00 via Android
GET /articles/zhangsan
GET /articles/zhangsan/演员的自我修养 平级的调用多次,或者用 POST 请求,多个参数放 body 里 |
11
misaka19000 2019-07-05 01:23:11 +08:00
很简单
GET /articles/zhangsan/演员的自我修养,编程宝典 这样就可以了 |
12
dobelee 2019-07-05 01:26:44 +08:00 via Android
不建议把细节放到 QueryString,这样不便于扩展。放 body 里想怎么玩都行。
|
13
Windelight 2019-07-05 06:51:43 +08:00 via Android
应该是分次请求 json 最好,比如
首先是 HTTP/2 GET /writer/zhang3/work HTTP/2 Response { "type"="work", "writer"="zhang3", "code"="success" "info":[{ "id"=1 "name"=xxxxx "time"=xxxxx "abstract"=xxxxx } { "id"=2 xxxxxxxxxx xxxxxxxxxxxxxxx }], } 以此类推,接着 HTTP/2 GET /article/1 这里你可以自由发挥了,然后 Response { "type"="novel/sci/nature/cell"(爱咋编咋编) "author"="zhang3" "code"="success" "content"="xxxxxxxxxxx" } 因为你要的是 API,不是展现给用户的地址栏,干嘛把查询作者信息放在 Article 这个 Controller 下面呢? |