用Guzzle在Laravel中消耗API的教程

545 阅读8分钟

Guzzle是一个PHP HTTP客户端,Laravel使用它来发送HTTP请求,与外部服务进行通信。Guzzle在Laravel中的封装专注于最流行的使用案例,同时提供了一个很好的开发体验。使用Guzzle会节省你的时间,并减少你的应用程序中的代码行数,使其更具可读性。

一个常见的用例是,当两个Laravel应用程序被开发出来,其中一个作为服务器,而另一个是客户端的功能。他们将需要向对方发出请求。下面是我们在这篇文章中要介绍的一些内容:

  • 什么是API?
  • 外部和内部API之间的区别。
  • 什么是Guzzle?
  • Laravel的HTTP客户端.
  • 发出请求.
  • 检查响应格式.

前提条件

以下内容将帮助你跟上本教程的进度:

  • 全局安装Composer
  • 已经安装了Laravel 8
  • 对Laravel有初步的了解
  • 邮递员

什么是API?

API是一个软件对软件的接口, 使两个应用程序能够交换数据.API正在推动一个新的服务共享创新时代的到来。几乎所有你能想到的主要网站都在使用它们, 包括谷歌, Facebook, 和亚马逊.所有这些网站和工具都使用并为其他网站和产品提供了消费和扩展彼此的数据和服务的方法。如果你曾经使用你的Facebook或谷歌凭证登录到一个应用程序或服务,你就已经在API的面前了。

它们作为开发者与人们和组织经常使用的不同程序之间的桥梁,使他们能够创造新的程序化互动。公司可以通过应用编程接口(或API)向外部第三方开发者、商业伙伴和内部部门开放其应用的数据和功能。通过一个文件化的接口,服务和产品可以相互沟通,并从对方的数据和能力中受益。

以下是一些常见的API的例子:

  • 用贝宝付款
  • 推特机器人
  • 用谷歌登录

API是如何工作的?

API作为应用程序和网络服务器之间的中间层运作,促进了系统间的数据传输。为了检索信息,客户端应用程序进行API调用,通常被称为请求。这个请求包含一个请求动词、标头,有时还有一个请求正文,通过API的统一资源标识符(URI)从一个应用程序发送到网络服务器。 API在收到一个有效的请求后,对外部程序或网络服务器进行调用。服务器用所请求的数据对API作出响应。这些数据通过API传输给请求的应用程序。

内部与外部API

内部API为团队提供了一个安全的环境来分享数据,并打破了传统的数据孤岛。内部API是一个接口,允许开发人员访问公司的后台信息和应用功能。这些开发者建立的新应用程序随后可以与公众分享,尽管该界面对没有直接与API发布者合作的人是隐藏的。 内部API可以帮助减少开发应用程序和资源所需的时间和资源。开发人员可以利用标准化的内部软件资产库,而不是从头开始设计应用程序。

外部API提供安全的通信和组织外的内容共享,从而带来更有吸引力的客户体验。外部或开放的API是为更多人以及网络开发者访问而设计的API。因此,外部API可以很容易地被组织内部的开发者(发布API的组织)和任何其他来自外部的希望注册该接口的开发者使用。

API的好处

抽象化

API通过抽象化实现,只公开开发者需要的对象或动作,使编程更容易。

安全性

它们使抽象数据的安全通信得以显示或按要求使用。

自动化

API允许计算机管理任务而不是个人。机构可以使用API来更新工作流程,使其更有效率。

个性化

API可以用来建立一个应用层,用于向新的受众传播信息和服务,并可以进行定制以创造独特的用户体验。

什么是REST API?

REST是一个首字母的缩写代表性状态转移。首先要区分的是,API是超集,而REST API是子集。这意味着,虽然所有的REST API都是API,但不是所有的API都是REST API。REST是为了指导万维网架构的设计和发展而开发的一种软件架构风格。REST API是一个遵循REST架构风格设计原则的API。REST APIs有时被称为RESTful APIs,就是因为这个原因。对于开发者来说,REST提供了相当大的灵活性和独立性。REST API由于其灵活性,已经成为微服务架构中连接组件和应用的流行方法。

REST API使用HTTP请求来执行常见的数据库活动,包括创建、读取、更新和删除记录(也被称为CRUD)。例如,一个REST API可能会使用GET请求来检索记录,使用POST请求来创建记录,使用PUT请求来更新记录,使用DELETE请求来删除记录。

什么是Guzzle?

Guzzle是一个PHP HTTP客户端,使发送带有数据和标头的HTTP请求变得容易。它也使与网络服务的集成变得简单。它提供了一个简单而强大的接口,用于发送POST请求,流式大规模上传和下载,使用HTTP cookies,以及上传JSON数据等。一个惊人的特点是,它允许你在同一个界面上进行同步和异步的请求。

以前,我们依靠cURL来完成类似的任务。然而,随着时间的推移,更多的进步已经出现了。Guzzle就是这些进步中的一个结果。

Laravel的HTTP客户端

Laravel将Guzzle的HTTP客户端包裹在一个富有表现力的基本API中,允许一个应用程序迅速地发出HTTP请求,与其他网络应用进行有效沟通。请求可以被发送,而响应可以通过HTTP客户端来获取。Guzzle是一个强大的HTTP客户端,但当执行一个简单的HTTP GET或从JSON API中检索数据时,80%的用例似乎很难。以下是Laravel HTTP客户端提供的一些流行功能:

  • JSON响应数据很容易访问。
  • 不需要一个模板设置来进行简单的请求。
  • 失败的请求会被重试。

你可能需要直接使用Guzzle来完成更复杂的HTTP客户端任务。然而,Laravel的HTTP客户端包含了你的大部分应用所需要的一切.

使用Laravel的HTTP客户端向API发出HTTP请求

为了探索Laravel的HTTP客户端的各种选项和使用情况, 我们将建立一个Laravel应用程序,展示如何使用Laravel的HTTP客户端向外部API发出请求。

注意: 这里使用的外部API是托管在我的本地服务器上。 你可以使用任何你想要的API; 重要的是要确保你得到正确的URL来向API发出请求.

在这篇文章中,我们将对用户API的URL进行点击,如下所示:

http://127.0.0.1:8000

创建一个新的Laravel项目

你可以通过Composer命令或Laravel安装程序创建一个新的Laravel项目:

laravel new project_name   
    or
composer create-project laravel/laravel project_name

安装软件包

你需要确保Guzzle包是作为你的应用程序的一个依赖项来安装的。你可以使用Composer来安装它:

composer require guzzlehttp/guzzle

.envconfig/app 目录中设置URL

考虑到你会不止一次地使用这个URL,把它作为你的环境变量之一是个好主意。这样做的好处是,如果以后需要改变URL,将只修改.env 文件,而不是在应用程序中调用该URL的所有点。将URL作为一个变量存储在.env 文件中。

GUZZLE_TEST_URL=http://127.0.0.1:8000

把它添加到config/app.php 目录下的return[] 数组中。

'guzzle_test_url' => env('GUZZLE_TEST_URL'),

接下来,通过运行这些命令清除你的配置和应用程序缓存。

php artisan config:cache
php artisan cache:clear

设置控制器

你将在控制器中向API发出GETPOSTDELETE 的请求。

用这个Artisan命令创建控制器。

php artisan make:controller TestController

导入Http Facade

use Illuminate\Support\Facades\Http;

注意:基本URL是从config/app.php ,请求的具体端点被附加到它上面。

提出一个POST 请求

public function createUser(Request $request){
$theUrl     = config('app.guzzle_test_url').'/api/users/create';
  $response= Http::post($theUrl, [
      'name'=>$request->name,
      'email'=>$request->email
  ]);
  return $response;
}

提出一个GET 的请求

public function getUsers(){
   $theUrl     = config('app.guzzle_test_url').'/api/users/';
   $users   = Http ::get($theUrl);
   return $users;
}

发出一个DELETE 的请求

public function deleteUser($id){
$theUrl     = config('app.guzzle_test_url').'/api/users/delete/'.$id;
     $delete   = Http ::delete($theUrl);
    return $delete;
}

设置路线

由于这是一个API,路由被定义在routes/api.php 目录中。

Route::post('post/users', [TestController::class, 'createUser']);
Route::get('users/', [TestController::class, 'getUsers']);
Route::delete('delete/users/{id}', [TestController::class, 'deleteUser']);

服务项目

运行这个Artisan命令来服务项目。

注意:我使用的是9000端口;你可以使用你想要的端口。

php artisan serve --port 9090

测试

我们将使用Postman来测试API。这些是请求的结果,它们对每个请求都返回成功。

POST GET DELETE

检查响应格式

Laravel的HTTP客户端提供了一个选项列表,其中包含各种格式的响应可以被返回。进一步的查询可以在响应上进行, 取决于它的返回格式.默认情况下,它返回一个字符串。

字符串

$response->body() 

对象

 $response->object() 

JSON

$response->json() 

总结

在这个教程中, 你已经学会了如何在Laravel中使用Laravel的HTTP客户端来消费API.在Laravel中消费API本身就是一个广泛的概念, 但本教程可以作为一个很好的入门指南.更多的信息可以在Laravel官方文档中找到.这个项目的代码是开源的, 可以在GitHub上找到.