我正在努力确定如何设计restful URL.我全都是为了使用带名词的URL的安静方法,而不是动词不明白如何做到这一点.
我们正在创建一个实施金融计算器的服务.计算器需要一堆参数,我们将通过CSV文件上传.用例包括:
我收集的其余方法是拥有以下类型的URL:
/parameters
/parameters/12-23-2009
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式实现前三个用例:
但是,如果没有动词,你如何做第4和第5个用例?你不需要像以下网址:
/parameters/ID/activate
/parameters/ID/validate
Run Code Online (Sandbox Code Playgroud)
??
是否真的要实现RESTful API,必须实现看起来像这样的URL结构
http://example.com/post/
http://example.com/post/123
Run Code Online (Sandbox Code Playgroud)
其中,/123将用于编辑,删除
提出问题的另一种方法是:看起来像这样的URL可以称为RESTful吗?
http://example.com/script.php?method=get_title&blogid=123
Run Code Online (Sandbox Code Playgroud) 我正在设计一个REST API,其中一些资源可以通过查询参数进行过滤.在某些情况下,这些过滤器值将是来自同一REST API的资源.这会产生冗长且非常难以理解的URI.虽然这本身并不是一个问题,因为URI意味着以编程方式创建和操作,但它会导致一些痛苦的调试.我正在考虑允许用作过滤器值的URI的快捷方式,我想知道这是否允许根据REST架构以及是否有任何最佳实践.
例如:
我有一个资源,让我获得Java类.然后,以下请求将为我提供所有Java类:
GET http://example.org/api/v1/class
Run Code Online (Sandbox Code Playgroud)
假设我想要CollectionJava类的所有子类,那么我将使用以下请求:
GET http://example.org/api/v1/class?has-supertype=http://example.org/api/v1/class/collection
Run Code Online (Sandbox Code Playgroud)
该请求将返回我Vector,ArrayList以及CollectionJava类的所有其他子类.
那个URI虽然很长.我可以通过允许hs作为别名来缩短它has-supertype.这会给我:
GET http://example.org/api/v1/class?hs=http://example.org/api/v1/class/collection
Run Code Online (Sandbox Code Playgroud)
允许更短URI的另一种方法是允许URI前缀的别名.例如,我可以定义class为URI前缀的别名http://example.org/api/v1/class/.这会给我以下可能性:
GET http://example.org/api/v1/class?hs=class:collection
Run Code Online (Sandbox Code Playgroud)
另一种可能性是完全删除类别名并始终为参数值添加前缀,http://example.org/api/v1/class/因为这是我唯一支持的内容.这会将所有子类型的请求Collection转换为:
GET http://example.org/api/v1/class?hs=collection
Run Code Online (Sandbox Code Playgroud)
原始请求URI的这些"简化"是否仍然符合REST架构的原则?或者我刚刚离开了深渊?
ADDENDUM:URI中可能同时有多个过滤器.可以是不同的参数,也可以是单个参数的值列表.按照"实现接口X和/或接口Y的所有类"或"实现接口X并且在ABC包中的所有类"的方式思考(其中包也可以像URI一样寻址http://example.org/api/v1/packages/a/b/c)
我们有一些实体既有唯一的业务ID(例如"my-unique-name"),也有内部UUID(例如aa54-342-dffdf-55445-effab).什么是提供可以使用任一方法返回资源的REST URI的好方法.
方法1 - 有两个资源URL(丑陋!!!):
/富逐ID /我的唯一名称
/富逐UUID/aa54-342-dffdf-55445-effab
方法2 - 始终使用查询参数(即使它返回单个项目......似乎是un-rest-lke)
/富?ID =我的唯一名称
/富?=的uuid aa54-342-dffdf-55445-effab
方法3 - 让网络服务弄清楚{id}是否是UUID(这可能容易出错,但在所有likihood中都可以正常工作......
方法4 - 使用UUID,允许业务ID作为查询参数(不知道这是否可行)
/富?ID =我的唯一名称
/富/ aa54-342-dffdf-55445-effab
任何想法都表示赞赏.