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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

1回答

2528閲覧

Laravel WebAPI の作成について

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2020/03/07 00:34

わからないこと

https://qiita.com/nakano-shingo/items/239f56dc5f8514b6f37b

こちらの記事を参考にLaravelでAPIの作成をしたいのですが、この記事の手順通りにやってもうまく出来ませんでした。。。

やりたいこと

今現状、Webアプリの作成をしているのですが、新規登録(store)箇所だけAPIにする、と言うことは出来るのでしょうか??

ご質問の内容としては

// 今現状のディレクトリ構造 src - app - Http - Controllers - HogeController.php // HogeController内のindexアクション // 127.0.0.1:8000/hoge にアクセスすると画面が表示される /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // return view('hoge.index'); } // hoge.indexの中でstoreに向けてpostしたいのですが、それをAPIにしたい // 今現状hoge.index内 // HogeControllerのstoreアクションにpostされる <form action="/hoge/store" method="post"> @csrf <input type="text" name="name"> <input type="text" name="email"> </form> // 上記をAPIにしたいです。 // ディレクトリ構造的にAPIは別で作りたいのですが src - app - Http - Controllers - Api ← ☆追加 - HogeController.php ← ☆追加 // Apiディレクトリ内のHogeControllerのstoreにpostしたい // やりたいこと // ここにpostするようにしたい post/store <form action="/api/hoge" method="post"> @csrf <input type="text" name="name"> <input type="text" name="email"> </form>

試したこと

上記の参考記事を元に Api/HogeController を作成し、routes/api.php に

// ここはもともと書いてありました Route::middleware('auth:api')->get('/user', function (Request $request) { return $request->user(); }); // ☆このルートを追加 Route::resource('tags', 'Api\TagController'); // ルートを追加したあとターミナルで // $ php artisan route:list を実行 ↓実行結果 | | POST | api/hoge | hoge.store | App\Http\Controllers\Api\HogeController@store | api,auth | | | GET|HEAD | api/hoge | hoge.index | App\Http\Controllers\Api\HogeController@index | api,auth | | | GET|HEAD | api/hoge/create | hoge.create | App\Http\Controllers\Api\HogeController@create | api,auth | | | GET|HEAD | api/hoge/{hoge} | hoge.show | App\Http\Controllers\Api\HogeController@show | api,auth | | | PUT|PATCH | api/hoge/{hoge} | hoge.update | App\Http\Controllers\Api\HogeController@update | api,auth | | | DELETE | api/hoge/{hoge} | hoge.destroy | App\Http\Controllers\Api\HogeController@destroy | api,auth | | | GET|HEAD | api/hoge/{hoge}/edit | hoge.edit | App\Http\Controllers\Api\HogeController@edit | api,auth | // storeルートがこれなので // api/hogeにpostすれば登録できるのかと思いましたがうまくいかず・・ | | POST | api/hoge | hoge.store | App\Http\Controllers\Api\HogeController@store | // ちなみにこちらにApi/HogeController内のindexアクションにこちらを書き足し // /api/hoge にアクセスしても/homeにリダイレクトされてしまいます use App\Models\Hoge; ←☆追加 /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // return response(Hoge::all()); } | | GET|HEAD | api/hoge | hoge.index | App\Http\Controllers\Api\HogeController@index |

色々ググってみたのですが、APIを使う際は、api_token が必要になるのか?
ルートリストに api,auth と書かれているので
src

  • app
    • Http
      • Controllers
        • Kernel.php

Kernel.php内の

protected $middlewareGroups = [ 'web' => [ \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, ], 'api' => [ // ここに 'web' に書いてあるものを書き足してみたりしました // こんな感じに \App\Http\Middleware\EncryptCookies::class, \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, \Illuminate\Session\Middleware\StartSession::class, // \Illuminate\Session\Middleware\AuthenticateSession::class, \Illuminate\View\Middleware\ShareErrorsFromSession::class, \App\Http\Middleware\VerifyCsrfToken::class, \Illuminate\Routing\Middleware\SubstituteBindings::class, // ここまで追加 'throttle:60,1', 'bindings', ], ];

がうまくいかず

src - app - config - auth.php // auth.php内の 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', ←☆ここをコメントアウトしてみたり 'provider' => 'users', ], ],

こちらもうまくいかずでした・・

あと、Apiディレクトリ配下ではないコントローラーのアクションからApiディレクトリ配下のコントローラーのアクションを呼び出しことは可能でしょうか?

// 例えば src - app - Http - Controllers - HogeController.php // ここのHogeControllerのindexアクションでhogeテーブルの中身を全て取得する際、Api/HogeControllerのindexアクションを介して取ってきたい // Controllers/Api/HogeControllerのindexアクション内で use App\Models\Hoge; ←☆追加 /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // // このレスポンスをControllers/HogeControllerのindexアクションに返したい return response(Hoge::all()); } // Controllers/HogeControllerのindexアクション内で /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // // こういったことは可能でしょうか?? $url = '/api/hoge'; // ここで上記の$urlにアクセスしてApi/HogeControllerのindexアクションから値を取得 ここに何を書けば・・???? return view('hoge.index'); }

このようなことは可能でしょうか??

すみません、ご教示お願い致しますm(_ _)m

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

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

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

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

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

m.ts10806

2020/03/07 02:52

さて、あなたにとっての「API」とは? どこからどのように使うことを想定したものを作ろうとしていますか? また既存のAPIは利用したことがありますか?
退会済みユーザー

退会済みユーザー

2020/03/07 04:30

m.ts10806 様 >さて、あなたにとっての「API」とは? GETリクエストすると、json形式でレスポンスが返ってくるもの POSTリクエストすると、登録や更新などができるもの ですかね・・・ >また既存のAPIは利用したことがありますか? 都道府県取得APIを使ったことがあります。 header に apiキーを付与してリクエストしたらjson形式で都道府県一覧が取れるようなAPIです。。 では、自分の「API」の認識が全然違うと言うことになりますよね・・・ すみませんでした・・・
guest

回答1

0

作る側になる前にユーザーとして使った経験がないと無理。
なにがやりたいのかが全く分からない。

WebAPIをこんな使い方することはないのでやろうとしてることが最初から間違ってる。

<form action="/api/hoge" method="post"> @csrf <input type="text" name="name"> <input type="text" name="email"> </form>

自称Laravel中級者でもroutes/web.phproutes/api.phpの違いを理解できてる人は少ないけど
APIは基本的に「外部から使うもの」
「jsonを返すのがAPI」としか認識してない人が多いけど全然違う。

なにもかも全部間違ってるとどうしようもないのでまず他のAPIを使ってみたほうがいい。
Twitterはもう使いにくいのでQiitaでもいい。
トークンでの認証やリクエストの送り方など使う側の視点が分かったら同じことができるように作る側で考えればいい。Laravelなら簡単。
https://qiita.com/api/v2/docs

投稿2020/03/07 01:52

kawax

総合スコア10377

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

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

退会済みユーザー

退会済みユーザー

2020/03/07 04:26

kawax 様 おお、、、、 やはり全然自分の想定違いでしたか・・・ もうすでに Laravel で作られたAPIを叩いたことがあるのですが(Postmanを使ってリクエストしました) その際は headers に token(api_token)を入れて GET /api/hoge にリクエストすると取得した一覧がjson形式で取れる と言うのはやったことがあるのですが、上記のご質問は全然認識違いですね・・・ 申し訳ございません。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問