API 调用应该是 GET 还是 POST?
我注意到一些API(如Twitter API)使用get方法进行所有操作,因此参数在URL中传递,如下所示:
http://api.twitter.com/1/statuses/user_timeline.json?screen_name=screenname
我有一些问题,并希望得到评论或更正:
-
我一直认为使用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最终看起来像,或者HTTP动词是控制正在执行的操作(创建,更新,删除,列表)的原因。我认为,从实际意义上讲,RESTful对于类似crud的数据最有用(创建条目,获取条目,更新条目,删除条目,显示所有条目)。那么,如果我不需要 crud,我需要 REST 吗?我的问题是:如果调用只是简单地提供输入并返回输出,那么这个API是否需要是RESTful?URL看起来不是RESTful,那么实现中是否有其他东西可以使其RESTful?
example.com/entry/1
example.com/entry/
-
至于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.
- (a) 读取文件的元数据并将其返回(应为 GET 还是 POST),或
- (b)我正在读取元数据并修改文件上的metada并返回修改后的文件(应该是GET还是POST)。
- 因此,这是为什么我可能需要发送大型数据的一个例子。问题是(a)和(b)被认为是GET还是POST操作?这就是为什么我问URL最大长度的原因