Laravel 在RESTful API中创建依赖资源
我对RESTful最佳实践的实现有点困惑 我有Laravel 在RESTful API中创建依赖资源,laravel,api,rest,Laravel,Api,Rest,我对RESTful最佳实践的实现有点困惑 我有客户资源和许可证资源。创建许可证时需要客户。我的疑问是,我能否在许可证创建请求中合并客户对象,以便服务部门检查是否存在并有条件地创建客户,然后为客户创建许可证 场景1-创建客户,然后使用客户标识符分别创建许可证 POST/customers { 'email': 'user-1@example.com', 'mobile': '9876543210' } POST/licenses { 'customer': {
客户
资源和许可证
资源。创建许可证时需要客户。我的疑问是,我能否在许可证
创建请求中合并客户对象,以便服务部门检查是否存在并有条件地创建客户,然后为客户创建许可证
场景1-创建客户,然后使用客户标识符分别创建许可证
POST/customers
{
'email': 'user-1@example.com',
'mobile': '9876543210'
}
POST/licenses
{
'customer': {
'email': 'user-1@example.com',
},
'expire_at': '2021-12-31'
}
{
'customer': {
'email': 'user-2@example.com',
'mobile': '9876543210'
},
'expire_at': '2021-12-31'
}
场景2-使用客户详细信息创建许可证。(如果不存在,将自动创建客户)
POST/licenses
{
'customer': {
'email': 'user-1@example.com',
},
'expire_at': '2021-12-31'
}
{
'customer': {
'email': 'user-2@example.com',
'mobile': '9876543210'
},
'expire_at': '2021-12-31'
}
场景2是否违反了RESTful概念
谢谢
我对RESTful最佳实践的实现有点困惑
不是你的错;互联网上有很多关于REST的令人困惑的信息
场景2是否违反了RESTful概念
启发式:你会如何在网站上做到这一点
这就是说,一个网页有一个表单,其中包含客户电子邮件、客户手机和过期信息的输入控制,在提交时将数据复制到发送到服务器的单个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设计的细节,以及您希望客户端立即刷新哪些文档)。您可以执行其中任何一项操作,没有REST约束禁止使用单个HTTP请求创建多个资源。最好在API描述中记录这一点
另一方面,我宁愿将您的createLicense或LicenseandCustomer->POST/licenses
操作拆分为createLicenseAndCustomer->POST/licenses/和/customers
,createLicense->POST/licenses
和createCustomer->POST/customers
。至少因为吻的原则,这样感觉更好。但这实际上取决于API设计师的品味。从错误处理的角度来看,这也很有趣,因为您可以在创建许可证时出错,但在创建客户时会成功。如果您使用数据库传输和回滚,那么这部分成功/失败不会发生