質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

7987閲覧

Laravelで作ったAPIをLaravelのコントローラーからリクエストしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/10/21 13:25

Laravel7.x系でHTTPリクエスト用のAPIを作成して、
それをLaravelのコントローラーから

php

1use Illuminate\Support\Facades\Http;

上記のHTTPClientを使用して、リクエストしたいと考えています。

ざっくりですがAPIのルーティングは以下のようになっています。

php

1Route::group(["namespace" => "Api\v1", "prefix" => "v1/member", "as" => "member."], function () { 2 // ログイン認証処理を実行 3 Route::post("/authenticate", [ 4 "as" => "authenticate", 5 "uses" => "MemberController@authenticate", 6 ]); 7 // メールアドレス変更前の新規メールアドレス登録 8 Route::put("/email/{member_id}", [ 9 "as" => "email", 10 "uses" => "MemberController@email", 11 ]); 12 // 新規ユーザーの本登録処理 13 Route::post("/{token}", [ 14 "as" => "create", 15 "uses" => "MemberController@create" 16 ]); 17 // 指定したIDにマッチするユーザー情報を取得する 18 Route::get("/{member_id}", [ 19 "as" => "show", 20 "uses" => "MemberController@show" 21 ]); 22 // 指定したIDにマッチするユーザー情報の更新処理を実行する 23 Route::put("/{member_id}", [ 24 "as" => "update", 25 "uses" => "MemberController@update" 26 ]); 27 // ログアウト処理を実行 28 Route::get("/logout", [ 29 "as" => "logout", 30 "uses" => "MemberController@logout", 31 ]); 32});

この場合

php、

1 Route::post("/authenticate", [ 2 "as" => "authenticate", 3 "uses" => "MemberController@authenticate", 4 ]);

上記へのAPIにLaravelのコントローラからリクエストしたいと考えています。
その場合、Laravelのコントローラ内から

php

1 /** 2 * Undocumented function 3 * 4 * @param Request $request 5 * @return Response 6 */ 7 public function authenticate(Request $request) 8 { 9 try { 10 $post_data = $request->all(); 11 // ログイン処理用のAPIをコールする 12 $response = Http::asForm()->post(action("Api\v1\MemberController@authenticate"), [ 13 'email' => $post_data["email"], 14 'password' => $post_data["password"], 15 ]); 16 var_dump($response->ok()); 17 var_dump($response->body()); 18 } catch (\Throwable $e) { 19 return view("member.errors.index", [ 20 "error" => $e->getMessage(), 21 ]); 22 } 23 }

上記のような、処理でPOST
リクエストを実行したところ、処理自体は走っておりますが、呼び出し元へ処理がもどってこないのです。
試しに、timeout(3)などのメソッドチェーンをつなげましたが、結局呼び出し元へは戻ってこないまま、ブラウザが延々ローディング続けてしまいます。

他にも、https://yahoo.co.jpなど別のサイトへのリクエストを試したところ、問題なく
呼び出し元へレスポンスがもどってきました。

どなたか、Laravelで作ったAPIをLaravelのコントローラから正しく呼び出す方法をご存知であれば、ご教授くださいますようお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

やろうとしてることがそもそも間違ってる質問が多すぎる…。

同じLaravelプロジェクト内のAPIにHttpクライアントでpostなんてする必要が全くない。
API側と呼び出す側で同じ処理をしたいならその処理を別classに切り出して両方から使えばいい。

Httpクライアントは外部へのリクエストに使う物。内部向けには基本的には使わない。

投稿2020/10/22 04:49

kawax

総合スコア10377

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phper.k

2020/10/22 05:26

この回答がマイナスついている意味がわからない。
guest

0

action("Api\v1\MemberController@authenticate")
は、実際どのようなURLになるか、var_dumpなどで確認されましたか?
そのURLは、Laravelが動いているサーバからアクセス(名前解決)できるURLでしょうか?

投稿2020/10/22 00:26

nshiro

総合スコア185

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/10/22 01:51

action関数で生成されるURLは問題なさそうです. (※http://localhost/api/v1/member/authenticate) 実際に,postmanなどの外部クライアントでリクエストするときと同じURLが生成されています. ただ,Laravelアプリ自体は,Laravel組み込みのphp artisan serve コマンドを使用していますが,それがDNS的な問題になっているでしょうか? ただ,実行されるAPI側の処理にログを仕込んだら,一応は最後の処理まで実行されているようです.
nshiro

2020/10/22 05:22

APIの@authenticateが、リダイレクトを返していて、そこで無限ループが発生しているとかは無いでしょうか? kawaxさんのおっしゃられている通り、処理を切り出しての対応が一番良いかと思いますが…。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問