2013-04-11 49 views
1

我正在构建一个以API为中心的Web应用程序,但我在解决某些业务逻辑时遇到了麻烦。如何在构建REST API时管理业务逻辑

采取这种使用情况:

POST /companies -> User adds a new Company which has a Location 

(公司实体都有一个位置实体,保持公司的地址,一个公司有一个位置,位置可以有多个公司)

PATCH/PUT /companies/{id} -> User edits a Company information (changes street name from Company->Location 

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

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

回答

1

容易:

  • PUT更换整个资源,如果它存在,或创建如果它不存在的新资源。如果你想严格遵守REST(没有必要),就没有其他选择可供选择。在你看到公司存在之前,用户可以检查公司是否存在GET。

  • POST是想替换所有公司收集的。您可以使用PATCH更新现有公司。

见:http://tools.ietf.org/html/rfc5789

+0

但这不是关于公司,而是关于位置。一个地点有多个公司。如果用户更改位置,我需要知道他是否真的想要更改位置实体(所有关联的公司都将具有编辑的位置数据)或创建新的位置。 – Simon 2013-04-11 12:20:16

+0

我认为您的数据模型存在问题。为什么一个地点有多家公司?它应该是相反的。你叫什么位置? – mpm 2013-04-11 12:54:46

+0

其实公司有多个网站(例如总部,工厂1,工厂2)。公司和网站有一对多的关系。网站与位置具有多对一的关系(位置可以有多个网站)。如果您更新给定公司的位置(与网站设置的关系),我想检查用户是否想要使用网站更改附加到该位置的所有公司的位置,或者创建新位置但保留同一网站。 – Simon 2013-04-11 12:58:11

1

的REST API或任何严格的服务将提供基于请求的响应。因此,如果其他公司与该位置相关,则REST API肯定能够回复用户。但API没有办法选择回应。 API可以回复一些信息,用户需要根据该信息提出另一个请求。

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

+0

所以也许一个GET/location/{id}/sites首先看看有多少公司正在使用这个位置,如果这是> 1,我的前端(AngularJS)会触发一个选择来做POST/location(Create一个新的位置),然后是PATCH/company/{id}/site(将网站更新到新的位置)或PATCH/location/{id}以更新原始位置。这是一个正确的RESTful方法吗? – Simon 2013-04-12 07:57:56