如何在Symfony 3中访问Rest API

本文概述

  • 自己使用cURL
  • 使用库(Unirest)
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=valuefunction CallAPI($method, $url, $data = http://www.srcmini.com/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证书问题:无法获取本地发行者证书” 错误, 则你可能需要阅读以下文章以了解如何解决。
如何在Symfony 3中访问Rest API

文章图片
响应变量具有以下属性:
  • headers [Array]:包含请求标头(日期, 服务器等)的数组。
  • 身体
  • code [Int]:请求的响应代码。
  • raw_body:请求的原始内容。
请注意, 由于API以JSON格式返回响应, 因此body属性自动转换为数组。在官方网站上了解有关Unirest PHP的更多信息。
使用最常见的unirest方法:
< ?phpUnirest\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)

【如何在Symfony 3中访问Rest API】玩得开心 !

    推荐阅读