首页 > 解决方案 > 在 RESTful API 中创建依赖资源

问题描述

我对 RESTful 最佳实践的实现有点困惑。

我有customer资源和license资源。创建许可证需要客户。我的疑问是我是否可以在license创建请求中组合客户对象,以便服务检查存在并有条件地创建客户,然后为客户创建许可证。

场景 1 - 创建客户,然后使用客户标识符单独创建许可证。

POST /customers

{
   'email': 'user-1@example.com',
   'mobile': '9876543210'
}

POST /licenses

{
   'customer': {
        'email': 'user-1@example.com',
    },
    'expire_at': '2021-12-31'
}

场景 2 - 使用客户详细信息创建许可证。(客户不存在时自动创建)

POST /licenses

{
   'customer': {
        'email': 'user-2@example.com',
        'mobile': '9876543210'
    },
    'expire_at': '2021-12-31'
}

场景 2 是否违反了 RESTful 概念?

谢谢

标签: laravelapirest

解决方案


我对 RESTful 最佳实践的实现有点困惑。

不是你的错; 互联网上有很多关于 REST 的令人困惑的信息。

场景 2 是否违反了 RESTful 概念?

启发式:您将如何在网站上执行此操作?

也就是说,拥有一个带有客户电子邮件、客户手机和 expire_at 输入控件的网页是否明智,当提交时将数据复制到发送到服务器的单个 HTTP 请求中?

POST /licenses HTTP/x.y
Content-Type: application/x-www-form-urlencoded

email=user-2@example.com&phone=9876543210&expire_at=2021-12-31

网站一直都在这样做。没关系。_ 所以让你的 API 做类似的事情也很好。


/licenses可能是也可能不是最好的目标uri。这很好,但是有一些缓存失效的影响,这可能意味着使用不同的资源会更好(取决于你的 URI 设计的细节,以及你希望客户端立即刷新哪些文档)。


推荐阅读