REST API设计:从哪里创建依赖于其他资源的资源?

时间:2015-08-27 13:50:43

标签: rest restful-architecture hateoas

如果我有两个资源,其中一个是从另一个创建的,那么我应该将创建端点放在哪里?

示例:

我有两个资源,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设计?

1 个答案:

答案 0 :(得分:3)

你需要清楚依赖。

A是否由B组成?换句话说,B是否存在于A范围之外?

  1. 如果答案是肯定的,B可以在没有A的情况下活着,最好有一个单独的资源:

    POST ./B
    
  2. 您应该避免资源位于不同的位置路径。有些人可能会争辩说,REST不会强迫您为一个资源设置单个端点,但保持一致性跨越不同的端点并不是那么明显。如果您发送B,<{1}}会发生什么?

    1. 如果答案为否,意味着除非存在A,否则B不可能存在,那么最好将B作为子资源。

      DELETE ./A/{id}
    2. 说到控制器,没有任何东西迫使你从另一个控制器管理B. REST的重点在于调用不是控制器的地址,而是资源的地址。您正在创建的资源独立于控制器。