HerokuでRESTfulなAPIを返すサーバーを立てたいのですがpostがうまく動きません。(getは動いています)
Laravel5.5で開発中です。
ローカルのサーバーではgetもpostもうまく動く事が確認出来たのでHerokuにアップしたのですが、
Heroku側ではpostが動きません。(データの登録ができません)
必要なカラムを埋めてpostをすると下記のようなものが返ってきます。
{ "data": [] }
ローカルもHerokuもpostmanを使って試しています。
▼ローカルの環境
サーバー: Apache
DB: MySql
▼Herokuの環境
サーバー: Apache?(デフォルトです)
DB: MySql
「heroku run bash」でHerokuの中に入ってからtinkerでモデルに直接データを入れることは出来ました。
postする際にheaderに仕込む値とか認証の知識があまいので、そこになにか問題があるのではないかなと予想はしているのですが、今のところどれを仕込めばよいのかわかっていません…。
なにかご存知でしたらよろしくお願い致します。
▼▼▼▼▼ 以下、追記(2017.10月1日) ▼▼▼▼
具体的なコードをお知らせします。
▼app/Http/Controllers/Book/BookController.php
<?php namespace App\Http\Controllers\Book; use App\Book; use Illuminate\Http\Request; use App\Http\Controllers\ApiController; class BookController extends ApiController { public function index() { $books = Book::all(); return $this->showAll($books); } public function create() { // } public function store(Request $request) { $rules = [ 'title' => 'required', 'author' => 'required', 'isbn' => 'required' ]; $this->validate($request, $rules); $data = $request->all(); $book = Book::create($data); return $this->showOne($book, 201); } public function show(Book $book) { return $this->showOne($book); }
▼app/Traits/ApiResponser.php
<?php namespace App\Traits; use Illuminate\Support\Collection; use Illuminate\Database\Eloquent\Model; trait ApiResponser { private function successResponse($data, $code) { return response()->json($data, $code); } protected function errorResponse($message, $code) { return response()->json(['error'=>$message, 'code'=>$code], $code); } protected function showAll(Collection $collection, $code = 200) { return $this->successResponse(['data'=>$collection], $code); } protected function showOne(Model $model, $code = 200) { return $this->successResponse(['data'=>$model], $code); } }
▼app\Http\Controllers\ApiController
<?php namespace App\Http\Controllers; use App\Traits\ApiResponser; use Illuminate\Http\Request; class ApiController extends Controller { use ApiResponser; }
▼routes/api.php
<?php use Illuminate\Http\Request; /* * User */ Route::resource('users', 'User\UserController', ['except' => ['create', 'edit']]); /* * Book */ Route::resource('books', 'Book\BookController');
▼マイグレーションファイル
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateBooksTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('books', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->string('author'); $table->string('isbn'); $table->timestamps(); $table->softDeletes(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('books'); } }
postmanで送っているものは以下の通りです(bodyに返ってきているものはtinkerで直接保存できたものです)
ちなみに今回はudemyの下記の口座を見ながら作っていまして、現在はセクション27付近まで見つつ実装しています。
▼参考にしている講座
https://www.udemy.com/restful-api-with-laravel-php-homestead-passport-hateoas/learn/v4/overview
▼上記コースの完成版のコード
https://github.com/JuanDMeGon/RESTful-API-with-Laravel-Definitive-Guide
あなたの回答
tips
プレビュー