本文概述
REST是用于设计网络应用程序的体系结构样式。这个想法是, 与其使用诸如CORBA, RPC或SOAP之类的复杂机制在机器之间进行连接, 不如使用简单的HTTP来在机器之间进行调用。在许多方面, 基于HTTP的万维网本身都可以视为基于REST的体系结构。 RESTful应用程序使用HTTP请求来发布数据(创建和/或更新), 读取数据(例如进行查询)以及删除数据。因此, REST将HTTP用于所有四个CRUD(创建/读取/更新/删除)操作。
由于REST API使用HTTP, 因此几乎所有编程语言都可以使用它们, 并且易于测试(REST API的要求是客户端和服务器彼此独立, 允许以任何语言进行编码并在支持长寿性方面得到了改进和进化)。
RESTful Web服务(也称为RESTful Web API)是使用HTTP和REST原理实现的Web服务。
基本上, 要访问api, 我们需要根据要对api端点(URL)进行的操作以不同的格式执行请求。使用javascript, 一个简单的XMLHttpRequest应该可以解决问题, 但是使用PHP, 还有另一种实现方法, 称为cURL。
cURL是一个库, 可让你使用PHP发出HTTP请求。你需要了解的所有内容(以及大多数其他扩展)都可以在PHP手册中找到。为了使用PHP的cURL函数, 尽管大多数PHP发行版都已经安装了cURL, 但是如果不是这种情况, 则需要安装»libcURL软件包。
自己使用cURL
如前所述, cURL是从PHP访问宁静的API的方法。
以下方法将帮助你获得
注意:建议使用库而不是纯cURL。
<?php
// 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;
}
如果出现错误, 该方法将返回false。你可以阅读以下主题, 该主题解释了如何使用cURL处理错误。
使用库(Unirest)
使用库而不是重新设计轮子, 这就是为什么最好使用Unirest而不是编写你自己的请求函数, 因为该库处理了使用普通cURL会遇到的许多常见问题, 并且得到了维护。
Unirest是一组由Mashape构建和维护的, 以多种语言提供的轻量级HTTP库, 该库还维护着开源API Gateway Kong。
特征
- 调用GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH请求的实用方法。
- 支持表单参数, 文件上传和自定义主体实体。
- 支持gzip。
- 本地支持基本, 摘要, 协商, NTLM身份验证。
- 可自定义的超时。
- 每个请求的可自定义默认标头(DRY)。
- 自动JSON解析为JSON响应的本机对象。
要求
- 卷曲
- PHP 5.4以上
要在项目中安装Unirest PHP, 请使用composer。你可以在composer.json文件中添加以下行:
{
"require-dev": {
"mashape/unirest-php": "2.*"
}
}
或者直接在控制台中执行命令:
composer require mashape/unirest-php
然后, 你将能够使用Unirest在类use Unirest;的顶部添加一个简单的use语句。
使用Unirest
以下代码显示了对Spotify API的/ search端点的简单GET请求。
<?php
// search Songs of Frank Sinatra
$headers = array('Accept' => 'application/json');
$query = array('q' => 'Frank sinatra', 'type' => 'track');
$response = Unirest\Request::get('https://api.spotify.com/v1/search', $headers, $query);
// or use a plain text request
// $response = Unirest\Request::get('https://api.spotify.com/v1/search?q=Frank%20sinatra&type=track');
// Display the result
dump($response->body);
注意:如果将Unirest与HTTPS API结合使用时, 如果代码引发” SSL证书问题:无法获取本地发行者证书”错误, 则你可能需要阅读以下文章以了解如何解决。
响应变量具有以下属性:
- headers [Array]:包含请求标头(日期, 服务器等)的数组。
- 身体
- code [Int]:请求的响应代码。
- raw_body:请求的原始内容。
请注意, 由于API以JSON格式返回响应, 因此body属性自动转换为数组。在官方网站上了解有关Unirest PHP的更多信息。
使用最常见的unirest方法:
<?php
Unirest\Request::get($url, $headers = array(), $parameters = null)
Unirest\Request::post($url, $headers = array(), $body = null)
Unirest\Request::put($url, $headers = array(), $body = null)
Unirest\Request::patch($url, $headers = array(), $body = null)
Unirest\Request::delete($url, $headers = array(), $body = null)
玩得开心 !
评论前必须登录!
注册