2017-08-24 22 views
0

我正在寻找关于为标准GET/PUT/POST/DELETE方法定义合同的意见。如何在RESTful服务中更好地指定ID

我们有资源,比方说客户端,所以路线将/客户

但是,我们有两种类型的ID的客户端。一个是我们的系统生成的ID。最重要的是,我们希望允许客户使用客户自己生成的外部标识。

所以,如果客户永远不会向客户添加到系统中,没有关于整合很感兴趣,并且只需要使用方法能读到客户,终点是:

/clients/{id} 

但是,如果他们想要完全整合,有能力添加客户端,并使用一些他们的ID,我们希望给他们使用他们自己的ID的能力。

我们考虑了四种可能的解决方案:

1. /clients/external/{externaId} 
2. /clients/ext-{externalId} 
3. /clients/{externalId}?use-external-id=true 
4. /clients/{externalId} with additional header -"use-external-id": true 

我们偏向于选择3和4(可同时支持),但担忧这种做法的“restfulness”。对此有何意见?你会选择什么?为什么?

回答

0

REST对URL没有提及。

内部和外部客户有何不同?如果唯一的区别是externalId属性的存在,只需使用/clients端点并将该属性添加到您的客户端资源。始终在API中分配和使用内部标识属性,但也允许查询按客户提供的外部标识进行过滤。

+0

客户端是相同的,我们只是希望能够通过我们的系统生成的Id或由外部组件生成的id来找到它们。例如,客户端可以是: Id:1 Name:Maxim Alexeyev ExternalId:MA –

+0

然后,如果我们选择第二种方法,我将能够通过url/clients/1或/ clients/ext-MA –

+0

与DELETE命令相同 –

0

如何:

/clients/client_id/1 - for automatically generated ids 
/clients/external_id/d23sa - for filtering on the external_id field 

这可以扩展到一般过滤器上的资源的任何领域,是发展SlashDB采用了我公司的做法。

+0

这与我们列表中的第一种方法类似。我关心的是,它看起来好像client_id是资源,而不是。资源是客户。 –