
Laravelで基本のREST APIを使ったデータ取得を試してみる
PHPのフレームワークLaravelでは簡単にREST APIを作成することができます。今回は基本的なAPIでGETメソッドを使ったデータ取得方法のメモになります。Laravelのインストールなどについては過去記事「【macOS】Laravelのインストールとプロジェクト作成の流れ」にて詳しくまとめています。
Laravelではデフォルトですとプロジェクトルート直下のrouteフォルダにある「api.php」にAPIのプログラムを記述していきます。ソースコードでは下記のように記述することで、指定したURLにアクセスすると設定した値がJSON形式で返ってくるようにすることができます。
【route/api.php】
またデフォルトでは「ドメイン/api/」のURLになっていますが、この部分は、api/Providers/RouteServiceProvider.phpにある下記の設定で変更することが可能です。prefix()にある引数を変更します。
【api/Providers/RouteServiceProvider.php】※一部抜粋
その場合にCORS対応をする場合「laravel-cors」のモジュールをインストールします。同じくcomposerから下記コマンドでインストールできます。
CORS対応について細かな設定は、config/cors.phpの設定ファイル内にある下記の部分で指定していく形になります。
【config/cors.php】※一部抜粋
<?php
Route::get("/data", function(){
return [
"message" => "hello world !!"
];
});
get()関数の第一引数にはURLのパスを指定します。返り値には取得するデータを入れておきます。これでローカルサーバーを起動した状態で、GETメソッドとしてURL「GET http://localhost/api/設定したパス名/」にアクセスするとJSONの値として確認できます。これが基本的なAPI作成になります。
またデフォルトでは「ドメイン/api/」のURLになっていますが、この部分は、api/Providers/RouteServiceProvider.phpにある下記の設定で変更することが可能です。prefix()にある引数を変更します。
【api/Providers/RouteServiceProvider.php】※一部抜粋
<?php
namespace AppProviders;
use IlluminateSupportFacadesRoute;
use IlluminateFoundationSupportProvidersRouteServiceProvider as ServiceProvider;
class RouteServiceProvider extends ServiceProvider {
protected function mapApiRoutes() {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
}
GETメソッドでのデータ取得
先ほどのは基本形であり、レスポンスボディにJSONの値として返す形になりますが、それ以外にもレスポンスヘッダーやステータスコードも設定することができます。下記のようにresponse()関数の引数へ、それぞれ順番に、レスポンスボディ、ステータスコード、レスポンスヘッダーと設定します。 【route/api.php】<?php
Route::get("/data", function(){
$responseHeaders = [
"X-Pages" => 1
];
$responseBody = [
"person" => array(
"性別" => "男性",
"血液型" => "A型",
"血液型" => "A型",
)
];
$statusCode = 201;
return response($responseBody, $statusCode, $responseHeaders);
});
ブラウザからGETメソッドでAPIのURLにアクセスすると実際に設定した内容で取得できているのが確認できます。
外部APIからGETメソッドでデータ取得
このような方法を応用することで、外部APIからデータを取得することも可能です。既存のウェブサービスではいろんなAPIが用意されています。今回はWordPressの投稿記事を取得できるWP REST APIを使って、GETメソッドでAPIを使用し投稿データをJSONで取得するサンプルになります。 その前に外部APIを叩いてデータを取得するケースではいくつかモジュールの追加が必要になります。まずはPHPで外部APIを叩けるモジュールである「Guzzle」をインストールします。下記コマンドでLaravelのプロジェクトルートに移動し、インストールしていきます。$ cd プロジェクトルート $ composer require guzzlehttp/guzzleそして、ドメインが異なるサーバーにある外部APIを叩く場合にはCORS制約に引っかかってしまい下記のようにエラーが出てしまいます。
その場合にCORS対応をする場合「laravel-cors」のモジュールをインストールします。同じくcomposerから下記コマンドでインストールできます。
$ cd プロジェクトルート $ composer require barryvdh/laravel-cors実際に外部APIを叩いてデータを取得するコードは下記のようになります。CORSはミドルウェアとしてget()関数に続けて記述する形になります。 【route/api.php】
<?php
// Guzzleモジュールのクラス読み込み
use GuzzleHttpClient;
Route::get("/data", function(){
$client = new Client();
$sourceUrl = "https://example.com/wp-json/wp/v2/posts/";
$responseData = $client -> request("GET", $sourceUrl);
$responseBody = json_decode($responseData -> getBody() -> getContents(), true);
return [
"status" => "OK",
"data" => $responseBody,
];
})
// CORS対応
-> middleware(BarryvdhCorsHandleCors::class);
GETメソッドでアクセスすると、実際のデータを確認することができました。
CORS対応について細かな設定は、config/cors.phpの設定ファイル内にある下記の部分で指定していく形になります。
【config/cors.php】※一部抜粋
'supportsCredentials' => false, 'allowedOrigins' => ['*'], 'allowedOriginsPatterns' => [], 'allowedHeaders' => ['*'], 'allowedMethods' => ['*'], 'exposedHeaders' => [], 'maxAge' => 0,今回はREST APIの具体的なサンプルとしてGETメソッドを使ったデータの取得についてまとめていますが、そのほかにもPOST、DELETEなどのメソッドでデータベースと連携したアプリケーションを作ることができます。またこちらについては別記事でまとめていきたいと思います。
categories
- WordPress(61)
- JavaScript(49)
- Vue.js(48)
- CSS(46)
- jQuery(34)
- Nuxt.js(22)
- Sass(21)
- Gulp(17)
- webpack(16)
- PHP(14)
- HTML(14)
- GSAP(11)
- React(10)
- Vite(9)
- Pug(9)
- Laravel(8)
- Cordova(8)
- Linux(7)
- Next.js(6)
- Apache(5)
- Shopify(4)
- REST API(4)
- Node.js(4)
- Smarty(3)
- Git(3)
- JSON(3)
- その他プログラミング(3)
- Google Apps API(3)
- Bootstrap(3)
- 環境構築・システム(3)
- TypeScript(2)
- EJS(2)
- RMS(2)
- Docker(2)
- Instagram API(2)
- Excel VBA(2)
- SVG(1)
- Dart(1)
- ECカートASP(1)
- Markdown(1)
- AMP(1)
- Nginx(1)
- XML(1)
- shellscript(1)
- Ruby(1)
- MySQL(1)