Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php API调用应该是GET还是POST?_Php_Api - Fatal编程技术网

Php API调用应该是GET还是POST?

Php API调用应该是GET还是POST?,php,api,Php,Api,我注意到一些API(如Twitter API)对所有内容都使用get方法,因此参数在URL中的传递方式如下: http://api.twitter.com/1/statuses/user_timeline.json?screen_name=screenname 我有一些问题,希望能提出意见或更正: 我一直认为使用GET不是一个好主意,最好使用POST 我正在编写的API需要一个密钥,我认为在URL中发送它不是一个好主意。那么,是否可以混合使用POST参数和URL参数 另一个问题是,我听说U

我注意到一些API(如Twitter API)对所有内容都使用get方法,因此参数在URL中的传递方式如下:

http://api.twitter.com/1/statuses/user_timeline.json?screen_name=screenname
我有一些问题,希望能提出意见或更正:

  • 我一直认为使用GET不是一个好主意,最好使用POST

  • 我正在编写的API需要一个密钥,我认为在URL中发送它不是一个好主意。那么,是否可以混合使用POST参数和URL参数

  • 另一个问题是,我听说URL有一个最大长度,所以我想这可能会让你感到不便,或者有解决办法吗

  • 我在POST中看到的唯一问题(我猜是为什么像twitter这样的网站会使用GET)是不能直接从浏览器发出请求。如果我错了,请纠正我


  • 更新:感谢所有帮助我集思广益的人。我有一些更新来澄清一些评论。

  • 当我谈到不想在URL中发送密钥时,我的意思是,如果用户要将呼叫添加到书签中,我不想将密钥添加到书签中,而不是说我根本不想将密钥公开。所以我猜从答案中我可以把它发送到标题栏?还有其他选择吗

  • 我想澄清的是,当我说不能从浏览器发出POST请求时,我应该说,
    POST请求不能从URL发出,如
    http://example.com/api/op.json?param=value
    。对不起,我说错了,应该说清楚点

  • Re不管它是不是RESTful:我以前用MVC框架做过RESTful,它负责检测动词,URL最终看起来像
    example.com/entry/1
    ,或者
    example.com/entry/
    ,HTTP动词控制着操作的执行(创建、更新、删除、列表)。我认为,在实际意义上,RESTful对于类似crud的数据(创建条目、获取条目、更新条目、删除条目、显示所有条目)最有用。如果我不需要积垢,我需要休息吗?我的问题是:如果一个调用只是给出输入并返回输出,那么这个API需要RESTful吗?URL看起来不是RESTful的,那么在实现中是否有其他东西可以使其成为RESTful的呢

  • 至于URL的大小,您评论了
    ,但是如果您非常关心它,您可能应该重新考虑您的API。GET请求不应该向服务器发送那么多数据。
    所以我有一个例子:用户想要发送一个大文件。在服务器上,我不会将文件输入数据库或保存它(因此根据标准,我不会“发布”数据),但可能是这样(这些都是很快想到的示例,请随意考虑):

    • (a) 读取文件的元数据并返回它(应该是GET还是POST),或者
    • (b) 我正在读取元数据并修改文件上的metada,然后返回修改后的文件(应该是GET还是POST)
    • 这就是为什么我可能需要发送大数据的一个例子。问题是(a)和(b)被认为是GET还是POST操作?这就是为什么我问URL的最大长度

    从服务器的角度来看,使用什么机制无关紧要。服务器端唯一有意义的区别是GET请求通常被完全记录(带有参数),而POST请求的数据通常不被记录(但这不是定制服务器的规则,定制服务器可以记录或不记录任何内容)

    此外,在许多情况下,您可以使用GET或POST,服务器将正确且透明地处理这两种情况。混合也是可能的,大多数服务器也将以透明的方式处理

    GET请求更容易调试(对于web开发人员),这可能是使用GET请求的主要原因。我还可以认为GET请求更容易处理,资源消耗更少(但这取决于代码的编写方式),因为GET请求中的所有内容都在头中传递,CRLFCRLF是一个请求分隔符(POST需要对主体执行额外的解析)

    URL确实有最大长度(4K是一个常见的限制,但不是强制性的),是的。一些代理和一些服务器(可能还有一些客户端)可能无法处理较大的URL或有人为限制(以防止攻击)

    我不确定我是否理解您关于“不能直接从浏览器发出请求”的想法。当您在浏览器中填写web表单时,它会发布到服务器(除非使用JavaScript或AJAX,否则使用它们您可能会收到GET请求)

    一,。我一直认为使用GET不是一个好主意,最好使用POST

    使用GET阅读信息,使用POST撰写信息。GET请求不应该修改服务器端状态,而POST请求可以安全地修改服务器端状态。一般来说,GET用于读取,POST用于写入。您的API可能应该同时使用这两种API,具体取决于每个特定的API调用使用哪种API

    二,。我正在编写的API需要一个密钥,我认为在URL中发送它不是一个好主意。那么,是否可以同时使用POST参数和URL参数呢

    通过POST发送数据根本不会增加任何级别的安全性。GET请求的安全性不亚于POST请求;它们是相同的。要传输私有数据,请使用SSL

    理想情况下,您应该使用HTTP头(如
    授权
    )来传输密钥,因为这不太可能被中介机构记录,也不太可能被发送到第三方服务(如bug追踪器)

    三,。另一个问题是,我听说URL有一个最大长度,所以我想这可能会让你感到不便,或者有解决办法吗

    HTTP标准没有定义URL的最大长度,尽管有一个。在通过JavaScript生成GET请求时,这可能无关紧要,但如果您非常关心它,您可以