Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
设计restapi_Rest - Fatal编程技术网

设计restapi

设计restapi,rest,Rest,目前,我拥有以下资源: 获取/orders/{orderNumber}/{provisionId}/{taxYear}/docs 这将返回给定订单的文档。订单由三个数字标识:orderNumber、provisionId和taxYear。这是数据库中的主键 我认为这是一个糟糕的资源设计,我想改变它,而不是为每个复合主键的部分使用不同的路径参数 是否有一个标准来模拟这种资源?我不知道如何管理具有复合id的实体 我曾想过这样做: 获取/orders/{orderNumber,provisionId,

目前,我拥有以下资源:

获取/orders/{orderNumber}/{provisionId}/{taxYear}/docs

这将返回给定订单的文档。
订单
由三个数字标识:
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语义的任何“标准”都是基于意见的。