如何在构建RESTAPI时管理业务逻辑

如何在构建RESTAPI时管理业务逻辑,rest,symfony,architecture,doctrine-orm,Rest,Symfony,Architecture,Doctrine Orm,我正在构建一个以API为中心的web应用程序,但是我很难理解一些业务逻辑 以这个用例为例: POST /companies -> User adds a new Company which has a Location (公司实体有一个保存公司地址的地点实体,一个公司有一个地点,一个地点可以有多个公司) 我希望我的API能够检查该位置是否已经有其他公司。 如果是这种情况,我希望用户在编辑位置实体(该位置上的所有公司都会更改)或创建新位置之间进行选择 如何以RESTful方式将此选项发送

我正在构建一个以API为中心的web应用程序,但是我很难理解一些业务逻辑

以这个用例为例:

POST /companies -> User adds a new Company which has a Location 
(公司实体有一个保存公司地址的地点实体,一个公司有一个地点,一个地点可以有多个公司)

我希望我的API能够检查该位置是否已经有其他公司。 如果是这种情况,我希望用户在编辑位置实体(该位置上的所有公司都会更改)或创建新位置之间进行选择

如何以RESTful方式将此选项发送回用户?

简单:

  • PUT
    替换整个资源(如果存在),或创建新资源(如果不存在)。如果你想保持严格的休息,你没有选择(但你不必这么做)。这取决于你的用户检查公司是否存在“先得后得”的情况

  • POST
    将替换所有公司集合

  • 但是,您可以使用
    补丁
    更新现有公司


请参阅:

RESTAPI或任何严格的服务都会根据请求提供响应。因此,如果其他公司与该位置相关,RESTAPI肯定可以回复用户。但是API没有办法做出选择的回应。API可以返回一些信息,用户需要根据这些信息发出另一个请求


相反,最好给用户一个预先指定的选项。因此,选择相关公司是否应该更新的位置是由用户预先作为请求的标准。例如,用户可以在RESTAPI上将其指定为查询参数,服务可以根据该查询参数采取适当的操作

但这不是关于公司,而是关于地点。一个地点有多个公司。如果用户更改了位置,我需要知道他是否真的想更改位置实体(所有连接的公司都将有编辑的位置数据)或创建新位置。我认为您的数据模型存在问题。为什么一个地点有多家公司?应该是相反的。你怎么称呼一个地点?实际上一家公司有多个地点(例如总部、工厂1、工厂2)。公司和现场之间存在一对多关系。一个站点与位置有多对一关系(一个位置可以有多个站点)。如果您更新给定公司的位置(与站点的关系集),我想检查用户是否希望使用站点更改附加到该位置的所有公司的位置,或者创建一个新位置,但保留相同的站点。因此,可能需要一个GET/Location/{id}/站点首先查看有多少公司正在使用该位置,如果该位置大于1,我的前端(AngularJS)将触发一个选择,要么执行POST/location(创建一个新位置),然后执行PATCH/company/{id}/site(将站点更新为新位置),要么执行PATCH/location/{id}以仅更新原始位置。这是一种正确的RESTful方法吗?
PATCH/PUT /companies/{id} -> User edits a Company information (changes street name from Company->Location