Rest '的休息实践;按自然键读取';操作

Rest '的休息实践;按自然键读取';操作,rest,jax-rs,Rest,Jax Rs,假设我们有一个通过RESTfulWeb服务处理“用户”实体的应用程序。用户实体具有主键和关联的“按主键读取”web服务: 主键是“id”,关联的读卡器是“users/{id}” 现在假设实体有几个自然关键点。相应的阅读器web服务是什么?以下是我倾向于使用的: 自然密钥“社会保险号”,读卡器“用户/bySsn/{ssn}” 自然键“email”,阅读器“用户/byEmail/{email}” 自然键“first name+last name”假设这对是唯一的,例如,读卡器“users/by

假设我们有一个通过RESTfulWeb服务处理“用户”实体的应用程序。用户实体具有主键和关联的“按主键读取”web服务:

  • 主键是“id”,关联的读卡器是“users/{id}
现在假设实体有几个自然关键点。相应的阅读器web服务是什么?以下是我倾向于使用的:

  • 自然密钥“社会保险号”,读卡器“用户/bySsn/{ssn}
  • 自然键“email”,阅读器“用户/byEmail/{email}
  • 自然键“first name+last name”假设这对是唯一的,例如,读卡器“users/byfirstname和lastName/{firstName}/{lastName}
我本可以改用查找程序,例如“用户?firstName=John&lastName=Doe”,但我选择不使用查找程序,因为这些查找程序的行为与读者不同:

  • 它们返回一个列表而不是单个值
  • 它们返回一个空列表,而不是404
  • 它们不能很好地与“users/bySsn/123456/address”等子资源配合使用
我的问题是:对于“按自然键读取”操作的REST实践是什么?


谢谢您抽出时间。

我不喜欢所有这些
bySsn
等等。就我个人而言,我会使用列表过滤(是的,我知道你不喜欢它)或公开单个端点
users/{id}/
,代替id接受id、SSN、电子邮件和任何需要的内容。你可以很容易地分辨出你用正则表达式得到的ID。我不喜欢所有这些
bySsn
等等。就我个人而言,我会使用列表过滤(是的,我知道你不喜欢它)或公开单个端点
users/{id}/
,代替id接受id、SSN、电子邮件和任何需要的内容。使用正则表达式,您可以很容易地识别您获得的ID。