PHP REST客户端API调用

4

我想知道是否有一种简单的方法来执行REST API GET调用?我一直在阅读关于cURL的文章,但这是一个好的方法吗?

我还发现了php://input,但我不知道如何使用它。有人能给我举个例子吗?

我不需要高级API客户端工具,我只需要执行对特定URL的GET调用,以获取将由客户端解析的一些JSON数据。

谢谢!

3个回答

7

有多种方法可以进行REST客户端API调用:

  1. 使用CURL

CURL是最简单且不错的选择。以下是一个简单的调用示例:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, POST DATA);
$result = curl_exec($ch);

print_r($result);
curl_close($ch);
  1. 使用Guzzle

这是一个“PHP HTTP客户端,使HTTP/1.1的工作变得容易,并消除了使用Web服务的痛苦”。与cURL相比,使用Guzzle要简单得多。

以下是网站上的示例:

$client = new GuzzleHttp\Client();
$res = $client->get('https://api.github.com/user', [
    'auth' =>  ['user', 'pass']
]);
echo $res->getStatusCode();           // 200
echo $res->getHeader('content-type'); // 'application/json; charset=utf8'
echo $res->getBody();                 // {"type":"User"...'
var_export($res->json());             // Outputs the JSON decoded data
  1. 使用file_get_contents

如果您有一个URL并且您的PHP支持它,您可以直接调用file_get_contents:

$response = file_get_contents('http://example.com/path/to/api/call?param1=5');

如果$response是JSON格式,使用json_decode将其转换为php数组:
$response = json_decode($response);
  1. 使用Symfony的RestClient

如果您正在使用Symfony,则有一个很棒的rest客户端bundle,甚至包括所有的约100个异常并抛出它们,而不是返回一些无意义的错误代码和消息。

try {
    $restClient = new RestClient();
    $response   = $restClient->get('http://www.someUrl.com');
    $statusCode = $response->getStatusCode();
    $content    = $response->getContent();
} catch(OperationTimedOutException $e) {
    // do something
}
  1. 使用 HTTPFUL

Httpful是一个简单、可链式调用、易读的PHP库,旨在使HTTP通信变得更加合理。它让开发者专注于与API交互,而不是在curl set_opt页面中查找信息,是一个理想的PHP REST客户端。

Httpful包括以下功能...

  • 易读的HTTP方法支持(GET、PUT、POST、DELETE、HEAD和OPTIONS)
  • 自定义头部
  • 自动“智能”解析
  • 自动负载序列化
  • 基本身份验证
  • 客户端证书身份验证
  • 请求“模板”

示例:

发送GET请求。自动获取解析为JSON响应。

该库注意到响应中的JSON Content-Type,并将其自动解析为本机PHP对象。

$uri = "https://www.googleapis.com/freebase/v1/mqlread?query=%7B%22type%22:%22/music/artist%22%2C%22name%22:%22The%20Dead%20Weather%22%2C%22album%22:%5B%5D%7D";
$response = \Httpful\Request::get($uri)->send();

echo 'The Dead Weather has ' . count($response->body->result->album) . " albums.\n";

这个答案非常详细,为读者探讨了全方位的选项。谢谢! - Dong Nguyen

2

2

你更喜欢哪种方法,为什么:cURL还是file_get_contents? - EsTeGe
file_get_contents通常更容易,但只能处理GET。如果您确定您的服务器可以处理它并且您确定以后不需要POST,那么这似乎对您的情况已经足够了。 - Nanne
file_get_contents似乎是这种用例中最简单的。 - EsTeGe
当您尝试使用SSL连接到网站时,cURL非常棘手。有几件事情必须完全正确,这使得它变得微妙且成为您未来需要学习两次才能解决的问题。 - Erik Schroder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接