laravel - 在 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 概念?
谢谢
解决方案
我对 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 设计的细节,以及你希望客户端立即刷新哪些文档)。
推荐阅读
- elasticsearch - Elasticsearch 基于从第一个值开始的单独聚合
- spring-boot - 在 Spring Boot Maven 项目中执行 Docker 文件时出错
- python - 属性错误 Django
- reactjs - 谁能解释为什么有人在可以使用冒号时需要尖括号,这更具可读性?
- maven - 如何从 Bazel 部署到 Maven 存储库
- python - Python3 - ImportError:没有命名的模块
- algorithm - 数据结构项目:文件资源管理器提示
- python - Vscode智能感知不适用于枕头
- python-3.x - sendmail(电子邮件,send_to_email,msg.as_string())的问题
- maxima - 使用 (wx)Maxima 求解方程:控制堆栈已耗尽