Как использовать REST API Laravel?

178
25 сентября 2018, 18:40

Всё сделал по этой статье https://arjunphp.com/create-rest-laravel-framework/

Запустил сервер php artisan serve

И как теперь получить данные?

Пишу /api/task выдаёт

Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
No message

И почему роуты надо прописывать в api.php, а не в web.php?

Я разобрался, надо это прописать http://127.0.0.1:8000/api/task/2

А как использовать метод put и delete?

Route::get('tasks','TaskController@index');
// get specific task
Route::get('task/{id}','TaskController@show');
// delete a task
Route::delete('task/{id}','TaskController@destroy');
// update existing task
Route::put('task','TaskController@store');
// create new task
Route::post('task','TaskController@store');


public function destroy($id)
    {
        //Get the task
        $task = Task::find($id);
        if (!$task) {
            return $this->response->errorNotFound('Task Not Found');
        }
        if($task->delete()) {
             return $this->response->withItem($task, new  TaskTransformer());
        } else {
            return $this->response->errorInternalError('Could not delete a task');
        }
    }
    public function store(Request $request)  {
        if ($request->isMethod('put')) {
            //Get the task
            $task = Task::find($request->task_id);
            if (!$task) {
                return $this->response->errorNotFound('Task Not Found');
            }
        } else {
            $task = new Task;
        }
        $task->id = $request->input('task_id');
        $task->name = $request->input('name');
        $task->description = $request->input('description');
        $task->user_id =  1; //$request->user()->id;
        if($task->save()) {
            return $this->response->withItem($task, new  TaskTransformer());
        } else {
             return $this->response->errorInternalError('Could not updated/created a task');
        }
    }
Answer 1

Писать роуты нужно в api.php потому что эти роуты не будут доступны через браузер напрямую. Эти роуты доступны для запросов со специальным header. Например, используя программу Postman (или любую другую) можно слать запросы к api.

Ниже указан закголовок, который определяет, что запрос идёт к API

Content-Type: application/json

Вместе с тем каждый запрос имеет свой Request Method - POST, GET, DELETE, PUT и др. Он тоже передаётся запросом.

Библиотеки для работы с api через js - axios, например.

Также все ваши роуты можно записать одной строкой, используя ресурс. Подразумевается, что в контроллере будут методы show, destroy и т.д. Можно некоторые запретить или не писать вовсе. Смотрите документацию (подраздел API Resource Routes).

Route::apiResource('tasks', 'TaskController');
READ ALSO
VPN на localhost сервере

VPN на localhost сервере

Вобщем у меня возможно необычная проблемаТестирую авторизацию через Вконтакте на localhost

161
проблема с переадресацией (бесконечная)

проблема с переадресацией (бесконечная)

Казалось бы, обычный кодЕсли есть айди в таблице, кидаем на страницу бан и никуда больше не пускаем

129
Поиск и взятие по маске один и более раз

Поиск и взятие по маске один и более раз

Требуется взять все то, что находится между (" "::" и между "::" ")

172