设计restapi
目前,我拥有以下资源: 获取/orders/{orderNumber}/{provisionId}/{taxYear}/docs 这将返回给定订单的文档。设计restapi,rest,Rest,目前,我拥有以下资源: 获取/orders/{orderNumber}/{provisionId}/{taxYear}/docs 这将返回给定订单的文档。订单由三个数字标识:orderNumber、provisionId和taxYear。这是数据库中的主键 我认为这是一个糟糕的资源设计,我想改变它,而不是为每个复合主键的部分使用不同的路径参数 是否有一个标准来模拟这种资源?我不知道如何管理具有复合id的实体 我曾想过这样做: 获取/orders/{orderNumber,provisionId,
订单
由三个数字标识:orderNumber
、provisionId
和taxYear
。这是数据库中的主键
我认为这是一个糟糕的资源设计,我想改变它,而不是为每个复合主键的部分使用不同的路径参数
是否有一个标准来模拟这种资源?我不知道如何管理具有复合id的实体
我曾想过这样做:
获取/orders/{orderNumber,provisionId,taxYear}/docs
这将是订单标识器的一个路径参数,服务器将对其进行拆分以获得每个零件
我认为的另一个选择是通过查询参数:
获取/orders/docs?orderNumber=1234&provisionId=1054&taxYear=2015
但我认为在REST体系结构中,最后一个参数在语义上是不正确的,因为在本例中,查询参数是必需的,而不是“搜索过滤器”参数
这有什么标准吗?哪个是更好的选择
谢谢GET
/orders/docs/{taxYear}/{orderNumber}/{provisionId}
如果docs是这些参数唯一要检索的东西,那么它似乎更有意义。我假设taxYear
和orderNumber
是1:many,在这种情况下orderNumber
和provisionId
也是1:many。如果这些假设中的一个或两个都是错误的,那么不同的排序将更有意义。复合资源标识符肯定是可能的。至少JAX-RS允许像@Path(“{first}-{second}/{third}”)这样的构造公共void doSomething(@PathParam(“first”)字符串第一,@PathParam(“second”)字符串第二,@PathParam(“third”)字符串第三,对象负载)…
。此外,路径参数也允许使用正则表达式。另见。根据您的问题:REST并没有定义端点URL的外观,它只需要符合HTTP协议,URI语义在REST中是不相关的。唯一重要的是客户端如何获取URI。关于URI语义的任何“标准”都是基于意见的。