我们的客户端给了我一个REST API,我需要对它进行PHP调用。但事实上,API提供的文档非常有限,所以我真的不知道如何调用该服务。
我试着谷歌它,但唯一出现的是一个已经过期的雅虎!关于如何调用服务的教程。不要提及标题或任何深入的信息。
是否有关于如何调用REST API的适当信息或相关文档?因为即使在w3学校中,它们也只描述SOAP方法。在PHP中创建API的其他选项有哪些?
我们的客户端给了我一个REST API,我需要对它进行PHP调用。但事实上,API提供的文档非常有限,所以我真的不知道如何调用该服务。
我试着谷歌它,但唯一出现的是一个已经过期的雅虎!关于如何调用服务的教程。不要提及标题或任何深入的信息。
是否有关于如何调用REST API的适当信息或相关文档?因为即使在w3学校中,它们也只描述SOAP方法。在PHP中创建API的其他选项有哪些?
当前回答
您可以使用file_get_contents来发出任何http POST/PUT/DELETE/OPTIONS/HEAD方法,除了函数名所示的GET方法之外。
如何在PHP中使用file_get_contents发布数据?
其他回答
使用Postman,您可以为大多数语言(包括PHP)生成调用API的代码。以下是步骤:
步骤1
使用Postman UI来指定你的API调用规范,即URL,方法,头,参数,主体等。
步骤2
在最右边,有一个小按钮,您可以通过它查看生成的代码。
步骤3
从下拉菜单中选择您喜欢的语言(和库),然后就可以开始了!
如果您正在使用Symfony,有一个很棒的rest客户端包,它甚至包含了所有~100个异常,并抛出它们,而不是返回一些毫无意义的错误代码+消息。
你真的应该检查一下: https://github.com/CircleOfNice/CiRestClientBundle
我喜欢它的界面:
try {
$restClient = new RestClient();
$response = $restClient->get('http://www.someUrl.com');
$statusCode = $response->getStatusCode();
$content = $response->getContent();
} catch(OperationTimedOutException $e) {
// do something
}
适用于所有http方法。
你可以通过php的cURL扩展访问任何REST API。但是,API文档(方法,参数等)必须由您的客户端提供!
例子:
// Method: POST, PUT, GET etc
// Data: array("param" => "value") ==> index.php?param=value
function CallAPI($method, $url, $data = false)
{
$curl = curl_init();
switch ($method)
{
case "POST":
curl_setopt($curl, CURLOPT_POST, 1);
if ($data)
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
break;
case "PUT":
curl_setopt($curl, CURLOPT_PUT, 1);
break;
default:
if ($data)
$url = sprintf("%s?%s", $url, http_build_query($data));
}
// Optional Authentication:
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($curl, CURLOPT_USERPWD, "username:password");
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
实际上有很多客户。其中之一是佩斯,看看这个。请记住,这些REST调用是简单的http请求,具有各种方法:GET、POST、PUT和DELETE。
使用HTTPFUL
Httpful是一个简单的,可链接的,可读的PHP库,旨在使HTTP说话正常。它让开发人员专注于与api的交互,而不是筛选curl set_opt页面,是一个理想的PHP REST客户端。
Httpful包括……
可读HTTP方法支持(GET, PUT, POST, DELETE, HEAD和OPTIONS) 自定义标题 自动“智能”解析 自动负载序列化 基本认证 客户端证书认证 请求“模板”
Ex.
发送一个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";