这有更好的休息界面吗?

时间:2013-02-22 02:01:44

标签: rest restful-url restful-architecture

GET https://api.website.com/v1/project/employee;company-id={company-id},
title={title-id}?non-smoker={true|false}&<name1>=<value1>&<name2>=<value2>&<name3>=<value3>

其中:  company-id是强制性的,  标题是可选的  名称/值可以是任何过滤条件。

有更好的方法来定义界面吗?

此API不应创建员工对象。它用于获取属于特定公司的一组员工对象,并具有特定标题和其他过滤条件。

3 个答案:

答案 0 :(得分:1)

  

这个api应该是GET员工对象,它满足特定公司的特定标准,具有特定的职称和其他一些过滤标准。

就个人而言,我只想将您的URI设计为http://acme.com/employee/?company=X&title=Y&non-smoker=Z&T=U。我不会写“公道”该公司是强制性的:您的API将更容易更改。

但是,您应该考虑一些“大”请求远远快于大量小请求。此外,可以有效地缓存URI表示。因此,拥有基于ID的URI通常会更好(因为有更多机会再次询问它们)。 因此,您可以使用http://acme.com/company/X获取公司的完整员工列表(以及有关公司本身的其他数据),然后在客户端对其进行过滤。

答案 1 :(得分:1)

我不知道是否有更好的方法,因为它通常取决于您使用的技术及其习语。

但是,这是我喜欢的两种不同的URI设计(以及为什么)

#1 GET https://api.website.com/v1/project/employee/{company-id}?title={title-id}&non-smoker={true|false}&<name1>=<value1>&<name2>=<value2>&<name3>=<value3>

#2 GET https://api.website.com/v1/project/company/{company-id}/employee?title={title-id}&non-smoker={true|false}&<name1>=<value1>&<name2>=<value2>&<name3>=<value3>

正如您在两个示例中所看到的,我从查询字符串中提取了公司ID。我更喜欢在路径信息中添加必需参数来区分它们。然后,在第二个URI中,员工资源嵌套在公司中。通过这种方式,您可以轻松猜测您可以从特定公司检索所有员工,这在第一个示例中并不明显。

答案 2 :(得分:0)

您是否正在创建新的员工对象?如果是这样,那么POST(创建)更合适。一个很好的线索是您在URL中推送的所有数据。所有这些都应该在POST对象的主体中。