🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

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

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

PHP

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

3回答

4783閲覧

ローカル環境にLaravelでREST APIを実装しようとしていますがlocalhost:8000へ接続できません

tn3376ams

総合スコア20

Laravel

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

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

PHP

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

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2021/03/09 07:09

編集2021/03/09 07:31

■やりたいこと
LaravelでREAT APIを実装したい

■環境
xampp(PHP 7.4.11・Windows10)
Laravel 6.20.2

■症状
設定を行い、localhost:8000へアクセスしたところ以下のメッセージが表示される

curl: (7) Failed to connect to localhost port 8000: Connection refused

■やったこと
restという名前でlaravelプロジェクトを作成
localhost/rest/public でプロジェクトトップ画面表示を確認
イメージ説明

apacheのhttpd.confに以下のソースを加えてlocalhostでプロジェクトトップ画面表示を確認

httpd.conf

1Alias / "/xampp/htdocs/rest/public/" 2 3<Directory "/xampp/htdocs/rest/public/"> 4 Options Indexes FollowSymLinks MultiViews 5 AllowOverride all 6 Order allow,deny 7 Allow from all 8</Directory>

以下、下記サイトを参考に作業を行っております。
https://noumenon-th.net/programming/2020/02/12/laravel-api/

DBにテーブルを作成して確認
イメージ説明

一応2レコードほど入れておく
イメージ説明

ルート情報を設定して確認
イメージ説明

コントローラを作成

PHP

1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use App\Models\Book; 7use App\Http\Requests\StoreBook; 8 9class BookController extends Controller 10{ 11 /** 12 * Display a listing of the resource. 13 * 14 * @return \Illuminate\Http\Response 15 */ 16 public function index() 17 { 18 $books = Book::all(); 19 return response()->json([ 20 'message' => 'ok', 21 'data' => $books 22 ], 200, [], JSON_UNESCAPED_UNICODE); 23 } 24 25 /** 26 * Store a newly created resource in storage. 27 * 28 * @param \Illuminate\Http\Request $request 29 * @return \Illuminate\Http\Response 30 */ 31 public function store(StoreBook $request) 32 { 33 $book = Book::create($request->all()); 34 return response()->json([ 35 'message' => 'Book created successfully', 36 'data' => $book 37 ], 201, [], JSON_UNESCAPED_UNICODE); 38 } 39 40 /** 41 * Display the specified resource. 42 * 43 * @param int $id 44 * @return \Illuminate\Http\Response 45 */ 46 public function show($id) 47 { 48 $book = Book::find($id); 49 if ($book) { 50 return response()->json([ 51 'message' => 'ok', 52 'data' => $book 53 ], 200, [], JSON_UNESCAPED_UNICODE); 54 } else { 55 return response()->json([ 56 'message' => 'Book not found', 57 ], 404); 58 } 59 } 60 61 /** 62 * Update the specified resource in storage. 63 * 64 * @param \Illuminate\Http\Request $request 65 * @param int $id 66 * @return \Illuminate\Http\Response 67 */ 68 public function update(StoreBook $request, $id) 69 { 70 $update = [ 71 'title' => $request->title, 72 'author' => $request->author 73 ]; 74 $book = Book::where('id', $id)->update($update); 75 if ($book) { 76 return response()->json([ 77 'message' => 'Book updated successfully', 78 ], 200); 79 } else { 80 return response()->json([ 81 'message' => 'Book not found', 82 ], 404); 83 } 84 } 85 86 /** 87 * Remove the specified resource from storage. 88 * 89 * @param int $id 90 * @return \Illuminate\Http\Response 91 */ 92 public function destroy($id) 93 { 94 $book = Book::where('id', $id)->delete(); 95 if ($book) { 96 return response()->json([ 97 'message' => 'Book deleted successfully', 98 ], 200); 99 } else { 100 return response()->json([ 101 'message' => 'Book not found', 102 ], 404); 103 } 104 } 105}

バリデーションはその箇所でエラーを起こすと別のメッセージが出るので割愛します。

で、確認すると以下の8000ポートのConnection refusedメッセージが返されます。
イメージ説明

同様に以下のサイトの記述に基づいて作業しても同様の

正常に接続できませんでした
localhost:8000 のサーバーへの接続を確立できませんでした。

というメッセージが返されます。

原因がわかりましたらご教授いただけますでしょうか。
宜しくお願いします。

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

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

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

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

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

m.ts10806

2021/03/09 07:12

>localhost/rest/public でプロジェクトトップ画面表示を確認 ドキュメントルート間違ってませんか?
tn3376ams

2021/03/09 07:32

localhost/rest/public トップ画面が表示された画像を追加しましたが、認識が違っているでしょうか?
tn3376ams

2021/03/09 07:52

.htaccessで、ここでいうきれいなURLにできることは知っています。 市販されているマニュアル本でも、作成したプロジェクトの確認方法として localhost/プロジェクト名/public で表示することができる、と明記されているので、プロジェクトの表示の確認できていることをここで書いておきたいと考えました。 最終的にhttp://localhostで表示できれば問題ないのではと思いますが、localhost/rest/publicでトップ画面が表示されていることに問題があるのでしょうか?
m.ts10806

2021/03/09 08:00

.htaccessではなくhttpd.conf つまりApache、Webサーバー本体の設定の話です。 「できる」と「実装として問題ないか」は別の話です。 ルート位置が変わってしまうことでURLに影響します。ポートも同様ですね。Webサーバーの設定です。 市販本よりドキュメントを優先してください。
tn3376ams

2021/03/09 08:20

今回、上にも記載した通り、.htaccessは使わず、httpd.confの設定で http://localhost でプロジェクトを表示するようにしています。 その前段階の確認として、localhost/プロジェクト名/public で表示できることを確認しています。 確認させていただきたいのですが、localhost/プロジェクト名/public で表示できてしまう時点でプロジェクトのインストールは失敗している、と言われているのでしょうか?
m.ts10806

2021/03/09 08:22

関係する項目はDocumentRootです。エイリアスは単なる別名であって、元のアクセスをなくすものではないです。 アクセスするだけならlocalhost/rest/public/api/booksでしょうけど。
guest

回答3

0

自己解決

アドバイスを参考にしてapacheのhttpd.confを修正していて以下の設定で自分が考えている機能を実装することができました。

DocumentRoot "C:/xampp/htdocs"

DocumentRoot "C:/xampp/htdocs/rest/public"

Listen 80

Listen 80
Listen 8000

ただ、ブラウザからはきちんとJSONが返ってくるのですが、curlで
curl http://localhost:8000/api/books/
とすると301 Moved Permanentlyのhtmlが返却されます。

一応8000番ポートからJSONは帰ってきたのでここはクローズにし、新しい質問をするようにします。

投稿2021/03/10 08:44

tn3376ams

総合スコア20

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

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

0

8000ポートのConnection refusedメッセージが返されます。

もしかして、php artisan serveするのを忘れてませんか?
あと、testrestの打ち間違いとか無いですよね?

投稿2021/03/09 14:13

gpsoft

総合スコア1323

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

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

0

http://localhost/test/public でアクセスできているなら
curl http://localhost/test/public/api/books
ではないでしょうか。
ブラウザでどこにアクセスしているか、curlでどこにアクセスしているか、したいかを再確認しましょう

投稿2021/03/09 08:11

mikkame

総合スコア5036

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

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

mikkame

2021/03/09 08:42

80ポートであってますよ。 あなたがブラウザでアクセスしているのはhttp://localhostなので80ポートです。 > 301 Moved Permanently これはサーバーがそう返しているからでしょう。未ログインとか、ケツ/とかで。 curl -L http://localhost/test/public/api/books でリダイレクトに追従するようになりますよ。 それかブラウザでhttp://localhost/test/public/api/booksにアクセスしてみて挙動確認してください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問