使用Rest API建议使用一个POST调用创建不同的对象

时间:2015-03-04 01:31:09

标签: web-services rest

我正在为我的网络应用程序实现一个RESTfull API,它在php中。我在决定是否允许使用单个POST调用创建多个不同类型的对象时遇到了问题。我的方案如下。

  1. addEmployee api服务功能允许客户端通过将数据作为POST参数传递来在我的应用程序内创建员工。
  2. 我的系统中Employee有两个依赖关系作为Job Title和Employment Status,它们是系统中单独保存的对象。因此,客户必须传递职务名称和就业状态名称以及addEmployee POST呼叫。
  3. 当客户端调用addEmployee方法时,它会在内部检查系统中是否已存在给定的Job Title和Employment Status,如果是,则只为Employee对象中的那些现有对象添加引用。
  4. 如果系统中没有给定职位或就业状态,则addEmployee方法将首先在系统中保存职位和就业状态对象,然后在员工对象中添加引用。 < / LI>
  5. addJobTitle和addEmploymentStatus有单独的API函数,如果客户需要向系统添加更多作业标题和就业状态,则可以使用这些函数。
  6. 在上述工作流程中,我不确定第4步是否正确,因为客户端看不到内部保存操作,这会降低API的可见性。但可用性明智,因为客户端可以添加一个最多一次Web服务调用的员工。

    我可以按如下方式更换第4步,以提高可见度。

    1. 如果系统中没有给定的职位或就业状态,则addEmployee方法将返回一个异常,说明系统中没有这些异常,并且该响应将提供uris to addJobTitle和addEmploymentStatus函数,允许客户端使用uris并首先保存那些职位和就业状况。保存职位和就业状态对象后,客户可以再次调用addEmployee方法,以添加具有给定职位和就业状态的员工。
    2. 第二种方法将提高API的可见性,但是性能差异和可用性使得它不会有效,因为客户端必须最多调用API 3次才能将Employee添加到系统中。

      请告诉我解决此问题的方法是什么。

1 个答案:

答案 0 :(得分:1)

我认为您尝试的第4步是有效的,没有任何更改,也是推荐的方法。

  • 如果您考虑职称和就业状况,则两者都与员工相关
  • 最好的方法是不要在API中公开方法来添加职位和添加就业状态。因为如果您这样做,客户可以继续创建,例如,可以创建职务Software Engineer,另一个可以创建SW Engineer。在你知道它之前,你有数百个职位名称。就业状况也是如此。
  • 只有职位名称和就业状态的列出方法可能足以满足那些(SQL或手动插入或仅管理员插入)的后端配置
  • 最后,正如您所提到的,您可以减少多个呼叫并减少带宽,这对于通过无线网络的移动应用程序使用API​​至关重要。