如果我使用没有参数值的查询字符串设计REST API,您会想到哪些缺点?像这样:
http://host/path/to/page?edit
http://host/path/to/page?delete
http://host/path/to/page/+commentId?reply
而不是例如:
http://host/api/edit?page=path/to/page
http://host/api/delete?page=path/to/page
http://host/api/reply?page=path/to/page&comment=commentId
(修改>任何page-X?edit
和page-X?delete
链接都会触发GET请求,但实际上不会编辑或删除该页面。相反,它们会显示一个带有{的页面{1}},<form>
可以编辑,或page-X
真正删除page-X? confiramtion对话框。实际的编辑/删除请求将是POST或删除请求。与<form>
显示包含修改host/api/edit?page=path/to/page
的页面的方式相同。 /编辑。)
请注意,<form>
不是通常格式化查询字符串的方式。相反,它们通常是这样形成的:?action
此外,有时我会使用这样的网址:
?key=value;key2=v2;key3=v3
也就是说,我包含一个没有值的查询字符串参数(http://host/path/to/page?delete;user=spammer
)和一个带有值(delete
)的参数(为了删除发布的所有注释垃圾邮件发送者)
我的Web框架可以很好地处理user=spammer
等查询字符串。所以我想,我最想知道的是,你能想到客户方面的问题吗?或任何问题,我应该决定使用另一个Web框架吗? (你知道你使用的框架是否提供了没有参数值的查询字符串的信息吗?)
(我从阅读http://labs.apache.org/webarch/uri/rfc/rfc3986.html的理解是我使用的查询字符串格式很好,但是对于所有客户端和服务器框架来说,这有什么关系。)
(我目前使用的是Lift-Web框架。我也测试了Play Framework,并且可以获得无值查询字符串参数,因此从我的观点来看,Play和Lift-Web似乎都没问题。)
以下是关于没有值的查询字符串的相关问题。但是,它处理的ASP.NET函数在某些情况下返回?reply
:Access Query string parameters with no values in ASP.NET
亲切的问候,Kaj-Magnus
答案 0 :(得分:4)
没有值的查询参数没有问题,但是将操作放入URI,特别是破坏性的是。
你是否认真考虑过“宁静”的设计,并且让GET成为一种破坏性的行为?