个性化阅读
专注于IT技术分析

如何在Symfony 3中访问Rest API

本文概述

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证书问题:无法获取本地发行者证书”错误, 则你可能需要阅读以下文章以了解如何解决。

正文请求Spotify API

响应变量具有以下属性:

  • 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)

玩得开心 !

赞(0)
未经允许不得转载:srcmini » 如何在Symfony 3中访问Rest API

评论 抢沙发

评论前必须登录!