如何在 laravel http 客户端 api 调用中分离基本 URL 和端点?

Aks*_*esh 4 php api http laravel guzzle

就像在 guzzle 中一样,我想将基本 URL 和端点分开

use Guzzle\Http\Client;
use Guzzle\Stream\PhpStreamRequestFactory;

$client = new Client('https://stream.twitter.com/');//base url

$request = $client->post('statuses/2',123);//end point


Run Code Online (Sandbox Code Playgroud)

Joh*_*obo 11

是的,这是可能的。它有一个方法叫做baseUrl().

Laravel 围绕Guzzle HTTP客户端提供了一个富有表现力的、最小的 API ,允许您快速发出传出 HTTP 请求以与其他 Web 应用程序进行通信。

 $response = Http::baseUrl("https://reqres.in/api")->get('users');
Run Code Online (Sandbox Code Playgroud)

另一种方法是创建。在应用程序的引导方法中定义宏App\Providers\AppServiceProvider class:

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Http;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        
        Http::macro('reqres', function () {
            return Http::baseUrl('https://reqres.in/api');
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以像下面一样重用这个方法。

 $response  = Http::reqres()->get('users');
Run Code Online (Sandbox Code Playgroud)

对于帖子方法

 $response  = Http::reqres()->post('users',[
        "name"=> "morpheus",
        "job"=> "leader"
    ]);
Run Code Online (Sandbox Code Playgroud)

内置的方法有很多,可以参考这里HTTP Client

不要忘记导入立面

use Illuminate\Support\Facades\Http;
Run Code Online (Sandbox Code Playgroud)

如果你想使用Guzzle那么

$client = new GuzzleHttp\Client(['base_uri' => 'https://reqres.in/api/']);

$response = $client->request('GET', 'users');
Run Code Online (Sandbox Code Playgroud)