设计以RESTful方式工作的复杂API的指南?

时间:2015-09-24 10:09:24

标签: api rest

我已经尝试了RESTful API概念,并发现它是构建资源API的一种很好的思维方式。例如,将comment添加到post将是

POST /posts/{id}/comments

然而,在某些情况下,如果我错了,请纠正我,预期的API不能真正成为一个简单的CRUD模型

例如,将product添加到系统需要添加picture,添加多个tags指定其category

如何以宁静的方式做到这一点?

1。)多次API调用后,我是否强制API用户关注?

POST /pictures  -- add picture
GET /categories -- get selected category
POST /tags       -- add tags
POST /products  -- input picture, category, tags ids as JSON fields 

2.。)我是否使用自动查找所有子资源的嵌套对象?

POST /products -- input nested JSON array with picture/category/tags object field

在这种情况下,所有子资源都将是现有资源,而不是应该发布的一些资源(picturetags)。 此外,如果在内部添加picture但在添加tags失败后会发生什么?

3.。)我只是做一个休闲的API吗?这如何适合REST?这不会破坏RESTful的想法吗?

POST /add_products

是否有任何指南可以处理RESTful API的复杂API?

谢谢。

1 个答案:

答案 0 :(得分:1)

在我看来,人们对REST最大的误解之一是内部模型(db中的表或mongo中的文档)和REST资源必须相同。 REST资源可以是真实模型,也可以是抽象实体,可能不存在于db中。

因此,在这种情况下,就REST而言,具有POSTPOST /products请求的网址完全没问题。根据我的个人经验提出的建议 - 只要REST的基本原则得到保护,就像

一样,人们不需要对网址过于教条。
  1. 使用正确的HTTP谓词
  2. 使用正确的状态代码
  3. 可缓存架构
  4. 通过网址
  5. 对资源进行唯一标识
  6. 超媒体(如果你能走得那么远)