我注意到一些像twitter API这样的API使用get方法来处理所有内容,因此参数会像这样在url中传递
http://api.twitter.com/1/statuses/user_timeline.json?screen_name=screenname
Run Code Online (Sandbox Code Playgroud)
我有一些问题,并希望评论或更正:
我一直认为使用GET并不是一个好主意,而且使用POST更好.
我编码的API需要一个密钥,我不认为在URL中发送它是个好主意.那么可以混合使用POST参数和URL参数吗?
另一个问题是我听到URL有最大长度,所以我想这会让GET脱离困境,或者是否有解决方法
我与POST看到的唯一的问题(和我猜就是为什么像Twitter网站用GET去)是该请求不能直接从浏览器制造.如果我错了,请纠正我.
更新:感谢所有帮助我集思广益的人.我有一些更新来澄清一些评论.
当我在谈论不想在URL中发送密钥时,我的意思是,如果用户要为呼叫添加书签,我不希望将该密钥加入书签,而不是我根本不希望密钥暴露.所以我想从答案中,我可以在标题字段中发送它?还有其他选择吗?
我想澄清一下,当我说POST请求时can't be made from the browser
,我应该说,POST requests can't be made from the url
如同http://example.com/api/op.json?param=value
.对不起,我错过了,本来应该更清楚.
重新判断它是否是RESTful:我之前使用MVC框架完成了RESTful,这个框架负责检测动词并且最终看起来像url example.com/entry/1
,或者example.com/entry/
http动词是控制正在执行的操作的内容(创建,更新,删除) ,列表).在实际意义上,我认为RESTful对于类似crud的数据最有用(创建条目,获取条目,更新条目,删除条目,显示所有条目).所以如果我不需要crud,我需要REST吗?我的问题:如果一个调用只是提供输入并返回输出,那么这个API是否需要RESTful?该URL看起来并不像RESTful,因此实现中还有其他东西可以使它成为RESTful吗?
至于URL大小,你评论but if you're seriously concerned about it you probably should rethink your API. GET requests shouldn't be sending that much data to the server.
我有这个例子:用户想要发送一个大文件.在服务器上,我不会将文件输入数据库或保存(因此根据标准我不是"发布"数据),但也许我(这些是很快被认为的例子,所以请宽松地拿它们) :
mea*_*gar 29
1.我一直认为使用GET并不是一个好主意,而且使用POST更好.
使用GET读取信息,使用POST写入信息.GET请求不应修改服务器端状态,而POST请求可以安全地执行此操作.通常使用GET进行读取,使用POST进行写入.您的API应该使用两者的混合,具体取决于每个特定的API调用.
2.我编码的API需要一个密钥,我不认为在URL中发送它是个好主意.那么可以混合使用POST参数和URL参数吗?
通过POST发送数据根本不会增加任何级别的安全性.GET请求与POST请求同样不安全; 他们是相同的.要传输私人数据,请使用SSL.
3.另一个问题是我听到URL有最大长度,所以我想这会让GET脱离困境,或者是否有解决方法
HTTP标准没有定义最大URL长度,但有些浏览器强加了一个.这可能与通过JavaScript生成GET请求无关,但如果您非常关注它,您可能应该重新考虑您的API.GET请求不应该向服务器发送那么多数据.
4.我在POST时遇到的唯一问题(我猜是为什么像twitter这样的网站使用GET)是因为请求无法直接从浏览器进行.如果我错了,请纠正我.
您的浏览器可以像GET请求一样轻松生成POST请求,通过地址栏提交POST请求会更加困难.
从服务器的角度来看,使用什么机制并不重要。服务器端唯一有意义的区别是 GET 请求通常会被完整记录(带参数),而 POST 请求的数据通常不会被记录(但这不是自定义服务器的规则,自定义服务器可以记录或不记录任何内容) 。
此外,在许多情况下,您可以使用 GET 或 POST,服务器将正确且透明地处理这两种情况。混合也是可能的,并且大多数服务器也会透明地处理。
GET 请求更容易调试(对于 Web 开发人员而言),这也许是使用它们的主要原因。我还可以认为 GET 请求更容易处理并且消耗更少的资源(但这取决于代码的编写方式),因为在 GET 请求中,所有内容都在标头中传递,并且 CRLFCRLF 是请求分隔符(对于 POST 来说,有必要对主体执行额外的解析)。
URL 确实有最大限制。长度(4K 是常见限制,但不是强制性的),是的。某些代理和某些服务器(可能还有某些客户端)可能无法处理较大的 URL 或存在人为限制(以防止攻击)。
我不确定我是否理解您关于“不能直接从浏览器发出请求”的想法。当您在浏览器中填写 Web 表单时,它会被 POST 到服务器(除非使用 JavaScript 或 AJAX,因为使用它们您可以发出 GET 请求)。
归档时间: |
|
查看次数: |
17747 次 |
最近记录: |