如果我有两个资源,其中一个是从另一个创建的,那么我应该将创建端点放在哪里?
示例:
我有两个资源,A和B,我想创建一个B.
B是一个简单的类,它引用A和创建它的用户,就像这个
public class B {
private A a;
private User user;
}
用户信息是通过HTTP请求隐式发送的,所以我不需要任何参数。
解决方案1:
向/A/123/B
发送没有任何参数的POST并返回B
。这意味着A的Controller负责创建B.感觉奇怪。
解决方案2:
将ID为123的POST发送至/B
。这意味着如果存在ID为123的A,我必须在Controller中检查B.感觉也很奇怪。
两种解决方案的优缺点是什么?我是否过度思考API设计?
答案 0 :(得分:3)
你需要清楚依赖。
A是否由B组成?换句话说,B是否存在于A范围之外?
如果答案是肯定的,B可以在没有A的情况下活着,最好有一个单独的资源:
POST ./B
您应该避免资源位于不同的位置路径。有些人可能会争辩说,REST不会强迫您为一个资源设置单个端点,但保持一致性跨越不同的端点并不是那么明显。如果您发送B
,<{1}}会发生什么?
如果答案为否,意味着除非存在A,否则B不可能存在,那么最好将B作为子资源。
DELETE ./A/{id}
说到控制器,没有任何东西迫使你从另一个控制器管理B. REST的重点在于调用不是控制器的地址,而是资源的地址。您正在创建的资源独立于控制器。