国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

如何使用Laravel的HTTP客戶端與外部API交互

這篇具有很好參考價(jià)值的文章主要介紹了如何使用Laravel的HTTP客戶端與外部API交互。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Laravel使API交互對新的和有經(jīng)驗(yàn)的Web開發(fā)人員來說都是輕而易舉的。Larvel的HTTP客戶端是建立在PHP的Guzzle HTTP客戶端之上,讓開發(fā)者在進(jìn)行HTTP請求時(shí)有更順暢的體驗(yàn)。它的主要功能包括認(rèn)證, 路由, 和有效的對象關(guān)系映射(ORM).

本文將探討如何使用Laravel的HTTP客戶端來進(jìn)行請求, 調(diào)試響應(yīng), 創(chuàng)建中間件和宏, 以及更多。

Laravel HTTP客戶端為你的API工作

Guzzle是一個(gè)簡單的PHP的HTTP客戶端。它為不同

use Illuminate\Support\Facades\Http;

return Http::get("https://reqres.in/api/users?page=2");

的表單請求提供了功能,包括?GET,?POST,?PUT, 和?DELETE?,以及流媒體功能和多部分請求。使用Guzzle HTTP客戶端,可以向服務(wù)器發(fā)送同步和異步的請求。此外,它還配備了體面的中間件來定制客戶端的行為。

Laravel的HTTP客戶端是一個(gè)建立在Guzzle基礎(chǔ)上的封裝器,但具有額外的功能。它包括支持重試失敗的請求和一些JSON數(shù)據(jù)的輔助功能。Laravel HTTP客戶端的大部分功能都與Guzzle類似。

前提條件

在下面的章節(jié)中, 你會(huì)了解到更多關(guān)于Laravel的HTTP客戶端。要繼續(xù)學(xué)習(xí), 你需要:

  • 有關(guān)Laravel, PHP, 和API的基本知識
  • 安裝了PHP和Composer
  • Postman

如何發(fā)出請求

要了解如何使用HTTP客戶端來發(fā)出請求, 你可以利用大量的托管API, 如ReqRes.

首先,導(dǎo)入創(chuàng)建應(yīng)用程序時(shí)包含的HTTP包。在App/Http/Controllers/UserController.php文件中,添加以下代碼,從文件開頭的use語句開始,其余代碼在index函數(shù)中。

Note:?對于復(fù)雜的用例,你也可以通過使用?withHeaders?方法發(fā)送帶頭文件的請求。

在同一個(gè)文件中,使用下面的代碼創(chuàng)建一個(gè)新的方法帖子:

function post()

{

$response = Http::withHeaders([

'Content-Type' => 'application/json',

])->post('https://reqres.in/api/users', [

'name' => 'morpheus',

'job' => 'leader',

]);

return $response;

}

然后在routes/web.php文件中為其添加一個(gè)路由:

Route::get('post',[UserController::class,'post']);

現(xiàn)在,可以用Postman來測試這個(gè)路由。打開Postman,添加http://127.0.0.1:8000/post 作為URL,請求類型為?GET?。一旦你點(diǎn)擊send,你會(huì)看到下面的響應(yīng):

如何使用Laravel的HTTP客戶端與外部API交互,后端編程技巧&教程,laravel,http,交互,php

使用Postman發(fā)出請求

并行請求

并發(fā)請求可以顯著提高性能,因?yàn)槟憧梢栽谕粫r(shí)間段內(nèi)獲取更多的數(shù)據(jù)。Laravel的HTTP客戶端使得使用pool方法進(jìn)行并發(fā)請求成為可能。

App/Http/Controllers/UserController.php里面, 添加以下代碼:

use Illuminate\Http\Client\Pool;

function concurrent()

{

$responses = Http::pool(fn (Pool $pool) => [

$pool->get('https://reqres.in/api/users?page=2'),

$pool->get('https://reqres.in/api/users/2'),

$pool->get('https://reqres.in/api/users?page=2'),

]);

return $responses[0]->ok() &&

$responses[1]->ok() &&

$responses[2]->ok();

}

然后,在routes/web.php文件中添加支持性路由。

Route::get('concurrent',[UserController::class,'concurrent']);

瀏覽器在訪問該路由時(shí),會(huì)給出如下響應(yīng):

如何使用Laravel的HTTP客戶端與外部API交互,后端編程技巧&教程,laravel,http,交互,php

并發(fā)請求

請求宏

請求宏在與常見的API路徑進(jìn)行交互時(shí)非常有用。

要?jiǎng)?chuàng)建宏,你需要使用下面的代碼在App/Http/Controllers/UserController.php文件的啟動(dòng)方法內(nèi)定義宏:

use Illuminate\Support\Facades\Http;

Http::macro('reqres', function () {

return Http::baseUrl('https://reqres.in/api');

});

Note:請確保在文件的開頭添加使用語句。

然后,在?UserController?里面使用這個(gè)宏,添加以下代碼:

function macro()

{

$response = Http::reqres()->get('/users?page=2');

return $response;

}

正如你所看到的,因?yàn)楹暌呀?jīng)被創(chuàng)建了,你不必再添加完整的URL。

最后,使用下面的代碼在routes/web.php文件中添加一個(gè)路由:

Route::get('macro',[UserController::class,'macro']);

如何使用Laravel的HTTP客戶端與外部API交互,后端編程技巧&教程,laravel,http,交互,php

宏請求

如何對響應(yīng)進(jìn)行解碼

要解碼一個(gè)響應(yīng)并確保一個(gè)API請求是成功的,你可以使用客戶端中的status方法。這個(gè)方法獲得從服務(wù)器發(fā)送的狀態(tài)代碼并顯示出來。

為了測試這一點(diǎn),在App/Http/Controllers/UserController.php文件中用下面的代碼替換之前的宏代碼:

function macro()
{
$response = Http::reqres()->get('/users?page=2');
return $response->status();
}

這里,狀態(tài)代碼200意味著請求成功。

如何使用Laravel的HTTP客戶端與外部API交互,后端編程技巧&教程,laravel,http,交互,php

成功解碼響應(yīng)

如何測試JSON APIs

Laravel有幾個(gè)輔助函數(shù)來測試JSON APIs和它們的響應(yīng)。這些輔助函數(shù)包括json, getJson, postJson, putJson, patchJson, deleteJson, 等等。

為了更好地理解測試,為?GET?用戶的路由創(chuàng)建一個(gè)測試場景。當(dāng)你啟動(dòng)Laravel應(yīng)用程序時(shí), Example Test已經(jīng)被創(chuàng)建。在test/Feature/ExampleTest.php文件中, 用以下內(nèi)容替換現(xiàn)有代碼:

<?php

namespace Tests\Feature;

use Illuminate\Foundation\Testing\RefreshDatabase;

use Tests\TestCase;

class ExampleTest extends TestCase

{

/**

* A basic test example.

*

* @return void

*/

public function test_example()

{

$response = $this->getJson('/users');

$response->assertStatus(200);

}

}

添加的代碼在用戶的路線上獲取JSON數(shù)據(jù),并檢查狀態(tài)代碼是否為200。

一旦你添加了測試代碼,在你的終端運(yùn)行以下命令來運(yùn)行測試:

./vendor/bin/phpunit

一旦測試完成,你會(huì)看到它運(yùn)行了兩個(gè)測試,都是成功的。

如何使用Laravel的HTTP客戶端與外部API交互,后端編程技巧&amp;教程,laravel,http,交互,php

測試JSON APIs

同樣地,你可以檢查不同類型的請求,并利用其他輔助方法進(jìn)行更復(fù)雜的測試。

如何處理事件

Laravel在處理HTTP請求時(shí)提供了三個(gè)事件。

  • RequestSending, 這是在請求被發(fā)送之前。
  • ResponseReceived, 這是當(dāng)收到一個(gè)響應(yīng)。
  • ConnectionFailed, 這是在沒有收到響應(yīng)的時(shí)候。

所有這三個(gè)事件都包括$?request?屬性,用來檢查?Illuminate\Http\Client\Request?實(shí)例,而?ResponseReceived?有一個(gè)額外的?$response property。這些對于在事件后執(zhí)行行動(dòng)特別有用。例如,你可能想在得到一個(gè)成功的響應(yīng)后發(fā)送電子郵件。

要?jiǎng)?chuàng)建一個(gè)事件和監(jiān)聽器,請瀏覽app/Providers/EventServiceProvider.php文件,用以下代碼替換listen數(shù)組。

protected $listen = [

Registered::class => [

SendEmailVerificationNotification::class,

],

'Illuminate\Http\Client\Events\ResponseReceived' => [

'App\Listeners\LogResponseReceived',

],

];

然后在你的終端運(yùn)行以下命令:

php artisan event:generate

上述命令將創(chuàng)建app/Listeners/LogResponseReceived.php監(jiān)聽器。用下面的代碼替換該文件的代碼:

<?php

namespace App\Listeners;

use Illuminate\Http\Client\Events\ResponseReceived;

use Illuminate\Http\Request;

use Illuminate\Http\Response;

use Illuminate\Support\Facades\Log;

class LogResponseReceived

{

/**

* Create the event listener.

*

* @return void

*/

public function __construct(Request $request, Response $response)

{

Log::channel('stderr')->info($response->status());

}

/**

* Handle the event.

*

* @param \Illuminate\Http\Client\Events\ResponseReceived $event

* @return void

*/

public function handle(ResponseReceived $event)

{

}

}

狀態(tài)代碼的信息日志被輸出到終端。

如何使用Laravel的HTTP客戶端與外部API交互,后端編程技巧&amp;教程,laravel,http,交互,php

顯示狀態(tài)代碼的終端日志

小結(jié)

無論一個(gè)網(wǎng)站或網(wǎng)絡(luò)應(yīng)用是由一個(gè)組織或獨(dú)立開發(fā)者制作的,API都是其成功的關(guān)鍵。然而,使用它們可能是困難的。

許多框架和庫都承諾簡化這一過程, 但Laravel因其專注于簡單性和易用性而脫穎而出. 他們內(nèi)置的客戶端支持簡單的API調(diào)用, 并發(fā)的API調(diào)用, API Macros, 基于JSON的API的輔助方法, 以及更多。文章來源地址http://www.zghlxwxcb.cn/news/detail-811317.html

到了這里,關(guān)于如何使用Laravel的HTTP客戶端與外部API交互的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用HTTP/2實(shí)現(xiàn)服務(wù)端主動(dòng)推送消息給客戶端

    使用HTTP/2實(shí)現(xiàn)服務(wù)端主動(dòng)推送消息給客戶端

    77. 使用HTTP/2實(shí)現(xiàn)服務(wù)端主動(dòng)推送消息給客戶端 HTTP/2 協(xié)議的服務(wù)器主動(dòng)推送機(jī)制是通過服務(wù)器在接收到客戶端請求后,主動(dòng)向客戶端推送相關(guān)資源的方式來實(shí)現(xiàn)的。下面將詳細(xì)解釋如何在服務(wù)器端和客戶端實(shí)現(xiàn) HTTP/2 的服務(wù)器主動(dòng)推送,并給出相應(yīng)的代碼示例。 客戶端實(shí)現(xiàn):

    2024年02月11日
    瀏覽(31)
  • 使用Go語言的HTTP客戶端和服務(wù)器

    使用Go語言的HTTP客戶端和服務(wù)器

    使用Go語言進(jìn)行HTTP客戶端和服務(wù)器開發(fā)是一種高效且強(qiáng)大的方式。Go語言的標(biāo)準(zhǔn)庫提供了對HTTP協(xié)議的全面支持,使得創(chuàng)建HTTP客戶端和服務(wù)器變得簡單。 首先,讓我們來看一下如何創(chuàng)建一個(gè)簡單的HTTP服務(wù)器。在Go中,可以使用 net/http 包來創(chuàng)建HTTP服務(wù)器。以下是一個(gè)簡單的示例

    2024年01月16日
    瀏覽(46)
  • 使用Http Interface客戶端解析text/html類型請求

    前言 Spring6和Spring Boot3的正式發(fā)布也有一段時(shí)間了,最低支持的java版本也是直接跳到了17。而且最近java21也出來了,作為一個(gè)javaer,你不會(huì)還在堅(jiān)守java8吧? Http Interface是Spring6新推出的一個(gè)聲明式http客戶端,寫法有點(diǎn)像Retrofit。最近也是在一個(gè)新的項(xiàng)目里引入了Http Interface,但

    2024年02月07日
    瀏覽(36)
  • HTTP Header定制,客戶端使用Request,服務(wù)器端使用Response

    HTTP Header定制,客戶端使用Request,服務(wù)器端使用Response

    ?在服務(wù)器端通過request.getHeaders()是無效的,只能使用response.getHeaders()。 ?

    2024年02月16日
    瀏覽(28)
  • 阿里云AliYun物聯(lián)網(wǎng)平臺使用-客戶端API獲取設(shè)備傳感數(shù)據(jù)

    阿里云AliYun物聯(lián)網(wǎng)平臺使用-客戶端API獲取設(shè)備傳感數(shù)據(jù)

    ? ? ? ? 上一篇文章中,已經(jīng)實(shí)現(xiàn)了虛擬數(shù)據(jù)上云,本文我們將進(jìn)行上位機(jī)客戶端的開發(fā),即通過調(diào)用阿里云IOT物聯(lián)網(wǎng)云平臺的SDK,開發(fā)能獲取傳感器的遙感數(shù)據(jù)。 ? ? ? ? 調(diào)用API需要用戶的AccessKey Secret,這意味著客戶端將取得主體賬號的所有權(quán)限。為了防止惡意用戶通過

    2024年02月16日
    瀏覽(18)
  • 使用Kafka客戶端(spring-kafka)的Java API操作Kafka的Topic

    記錄 :458 場景 :在Spring Boot微服務(wù)集成Kafka客戶端spring-kafka-2.8.2操作Kafka的Topic的創(chuàng)建和刪除。 版本 :JDK 1.8,Spring?Boot 2.6.3,kafka_2.12-2.8.0,spring-kafka-2.8.2。 Kafka安裝 :https://blog.csdn.net/zhangbeizhen18/article/details/129071395 1.微服務(wù)中 配置Kafka信息 1.1在pom.xml添加依賴 pom.xml文件: 解析

    2024年02月09日
    瀏覽(20)
  • 使用Kafka客戶端(kafka-clients)的Java API操作Kafka的Topic

    記錄 :460 場景 :在Spring Boot微服務(wù)集成Kafka客戶端kafka-clients-3.0.0操作Kafka的Topic的創(chuàng)建和刪除。 版本 :JDK 1.8,Spring?Boot 2.6.3,kafka_2.12-2.8.0,kafka-clients-3.0.0。 Kafka安裝 :https://blog.csdn.net/zhangbeizhen18/article/details/129071395 1.微服務(wù)中 配置Kafka信息 1.1在pom.xml添加依賴 pom.xml文件: 解析

    2024年02月09日
    瀏覽(94)
  • 使用idea如何生成webservice客戶端

    使用idea如何生成webservice客戶端

    需求闡述 在和外圍系統(tǒng)對接的時(shí)候,對方只給了wsdl地址,記得之前了解到的webservice,可以用idea生成客戶端代碼。先記錄生成的步驟 我的idea再右鍵要生成文件目錄里面沒有webservice選項(xiàng),只能通過查找功能找到 generate Java Code From WSDL功能。 打開功能,我們需要填充3項(xiàng)內(nèi)容:

    2024年02月14日
    瀏覽(23)
  • 【Spring Cloud】如何把Feign默認(rèn)的HTTP客戶端URLConnection更換成支持連接池的Apache HttpClient或OKHttp

    【Spring Cloud】如何把Feign默認(rèn)的HTTP客戶端URLConnection更換成支持連接池的Apache HttpClient或OKHttp

    本次示例代碼的文件結(jié)構(gòu)如下圖所示。 Feign 發(fā)送 HTTP 請求時(shí),底層會(huì)使用到別的客戶端。下面列出常用的 3 種 HTTP 客戶端。 HTTP客戶端 特點(diǎn) URLConnection Feign 的默認(rèn)實(shí)現(xiàn),不支持連接池 Apache HttpClient 支持連接池 OKHttp 支持連接池 其中, URLConnection 是 Feign 默認(rèn)使用的 HTTP 客戶端

    2024年02月14日
    瀏覽(54)
  • RustDesk自建中轉(zhuǎn)服務(wù)器如何自己編譯 RustDesk客戶端,將企業(yè)固定IP/域名寫進(jìn)客戶端,客戶端安裝無需配置直接使用(三)

    RustDesk自建中轉(zhuǎn)服務(wù)器如何自己編譯 RustDesk客戶端,將企業(yè)固定IP/域名寫進(jìn)客戶端,客戶端安裝無需配置直接使用(三)

    Ubuntu20.04.4 LTS Docker Version: 20.10.12 RustDesk1.20 Git-2.39.0-64-bit visual studio 2022 VSCodeUserSetup-x64-1.74.1 RustDesk自建中轉(zhuǎn)服務(wù)器如何自己編譯 RustDesk客戶端,將企業(yè)固定IP/域名寫進(jìn)客戶端,客戶端安裝無需配置直接使 最近有粉絲反映,編譯最后會(huì)提示key不匹配等問題,拉取普通開源版,別

    2024年02月05日
    瀏覽(102)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包