iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
自我挑戰組

PHP框架-Laravel自學挑戰系列 第 9

DAY9-利用Controller發送API請求- GET REQUEST

  • 分享至 

  • xImage
  •  

哈囉大家好~
今天要來練習在Controller中撰寫發送GET Request!
選擇的API是隨機產生狗狗圖片的簡單API,大家也可以參考看看(狗狗都好可愛/images/emoticon/emoticon02.gif

這個API的路徑位置很簡單:
https://dog.ceo/api/breeds/image/random
因為是設定隨機返回狗狗照片以及資料回傳狀態,
所以發送請求時不需要帶入任何參數。

首先先撰寫發送GET REQUEST的controller(DogController.php)

<?php

namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
use Illuminate\Contracts\View\View;

class DogController extends Controller
{
    public function getDogInfo(): View 
    {
        $response = Http::get('https://dog.ceo/api/breeds/image/random');
        if ($response->failed()) { #這邊簡略處理 status code >= 400的error
            return view('/error'); #寫一個error畫面告知失敗
        }
        $result = json_decode($response);
        return view('/dog', [ 'info' => $result ]);
    }
}

因為發送的是GET Request,所以用get()裡面傳入要打的API位置,
回傳的資料先進行error handling,若出現status code >= 400的錯誤,就會回傳'/error'這個路徑的對應頁面。
API文檔裡有提到回傳的資料型態是JSON檔,所以傳回來的資料要再用json_encode() function進行處理。
(這裡我直接回傳全部的資料,並把這個值指丟給變數$info。)
最後一行程式碼將畫面導至/dog這個路徑的頁面,並且將$info傳遞到該頁面。

再來先定義顯示這個畫面的路徑:(web.php)

<?php
use App\Http\Controllers\CatController;
use Illuminate\Support\Facades\Route;

Route::get('/dog', [DogController::class, 'getDogInfo']);

第一個參數是我們想要顯示資料的路徑,第二個參數是剛剛發送GET Request的getDogInfo() function。
也就是說,當切換到這個路徑的頁面時,就會呼叫對應controller中的function。

再來寫好一個等一下要展示狗狗的頁面(dog.blade.php)

<!DOCTYPE HTML>
<html>
    <head></head>
    <body>
        <h1>Random Dog HERE!</h1>
        <img alt="random-dog" src="{{ $info->message }}"/>
        <p>{{ $info->status }}</p>
    </body>
</html> 

這裡的$info是剛剛發送請求後回傳的資料,根據文檔可以知道回傳的內容有兩個attribute,分別是message(狗狗圖片的url)以及資料回傳的狀態(status)。
這裡透過箭頭來取得對應attribute的值,也可以在controller把各attribute指定不同變數後傳遞,然後在template直接使用該變數。

每當重整一次頁面,就可以看到新的狗狗照片~(幾乎都是不同品種的狗,共通點是都很可愛XD)


今天在瀏覽官方文檔時,真的有種Laravel的東西很多,無窮無盡的感覺/images/emoticon/emoticon06.gif
所以也只能把目前學到的最基本部分分享給大家了!
也歡迎各個高手們在下方留言其他的寫法或是程式碼可以優化的部分!
那簡單的發送Get Request介紹也到這邊啦~明天要來試試post request/images/emoticon/emoticon71.gif
那就明天見~


上一篇
DAY8-練習撰寫Laravel框架中的blade模版-(3)
下一篇
DAY10-利用Controller發送API請求-POST REQUEST
系列文
PHP框架-Laravel自學挑戰30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言