【问题标题】:Query string with keys without values使用没有值的键查询字符串
【发布时间】:2011-08-06 23:47:02
【问题描述】:

如果我用不带参数值的查询字符串设计我的 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?editpage-X?delete 链接都会触发GET 请求,但不会实际编辑或删除页面。相反,它们会显示带有<form> 的页面,在其中page-X 可以编辑,或者<form> 带有真的删除页面-X? 确认对话框。实际的编辑/删除请求将是POST 或DELETE 请求。与@ 相同的方式987654330@ 显示带有编辑 <form> 的页面。/Edit.)

请注意,?action 通常不是查询字符串的格式。相反,它们通常格式如下:?key=value;key2=v2;key3=v3

此外,有时我会使用这样的 URL:

http://host/path/to/page?delete;user=spammer

也就是说,我将包含一个没有值的查询字符串参数 (delete) 和一个有值的参数 (user=spammer)(以便删除 垃圾邮件发送者发布的所有 cmets >)

我的 Web 框架可以很好地处理像 ?reply 这样的查询字符串。所以我想我最想知道的是,你能想到任何客户端问题吗?或者有什么问题,我应该决定使用另一个 Web 框架吗? (你知道你使用的框架是否提供了没有参数值的查询字符串的信息吗?)

(通过阅读http://labs.apache.org/webarch/uri/rfc/rfc3986.html,我的理解是,我使用的查询字符串格式很好,但这对所有客户端和服务器框架有什么影响。)

(我目前使用 Lift-Web 框架。我也测试过 Play Framework,并且可以获取无值查询字符串参数,所以从我的角度来看,Play 和 Lift-Web 似乎都还可以.)


这是一个关于没有值的查询字符串的相关问题。但是,它处理在某些情况下返回 null 的 ASP.NET 函数:Access Query string parameters with no values in ASP.NET

亲切的问候,Kaj-Magnus

【问题讨论】:

    标签: api http url rest query-string


    【解决方案1】:

    没有值的查询参数没有问题,但是将操作放入 URI,尤其是破坏性的,是。

    您是否认真考虑过“宁静”的设计,并且让 GET 成为破坏性操作?

    【讨论】:

    • ?edit 查询参数将导致出现一个页面,其中包含一个带有字段的<form>,以便您可以编辑该页面。当您单击提交时,实际的编辑请求将是一个 POST。 ?delete 查询参数可能会显示带有对话框“删除页面 X?”的页面。在<form> 中,实际的删除请求将是 POST 或 DELETE。所以?action 实际上不会 任何事情,只显示您可以提交表单的页面。 (您认为这是一个合理的设计吗?)——我最好更新我原来的问题,以澄清?delete 不会删除。
    • 啊。感谢您的澄清。现在说得通了。
    • 你的动机是......有点简洁:-)“[他们]没问题”。好吧,我相信你,我会等一会儿,以防其他答案也出现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多