Не удается выполнить POST с помощью Postman — ошибка 405/ошибка 500 в ответе — Laravel json API

Я делаю JSON API с Laravel. и я пытаюсь протестировать его с помощью POSTMAN, прежде чем продолжать создавать для него внешний интерфейс. Мой API — это серверная часть панели новостей, которая выполняет функции CRUD.

Вот маршруты:

Route::get('/news', 'App\Http\Controllers\NewsController@index')->name('news.index');
Route::get('/news/{newsItem}', 'App\Http\Controllers\NewsController@show')->name('news.show');
Route::post('/news', 'App\Http\Controllers\NewsController@store')->name('news.store');
Route::patch('/news/{newsItem}', 'App\Http\Controllers\NewsController@update')->name('news.update');
Route::delete('/news/{newsItem}', 'App\Http\Controllers\NewsController@destroy')->name('news.destroy');

/news показывает мне и пустой массив [] , потому что БД пока пуста. почтальон GET тоже возвращает 200 OK. Я попытался опубликовать полезную нагрузку JSON с помощью почтальона:

{
  "title": "Example News Item",
  "content": "This is the content of the news item.",
  "category_id": 1,
  "tags": [1, 2, 3]
}

Сначала я получаю сообщение об ошибке 419 unknown status ; затем я переместил свои маршруты с web.php на api.php, а индекс /api/news вместо /news.

Так что тестирую /api/news

GET http://127.0.0.1:8000/api/news/ возвращается 200 OK но

POST http://127.0.0.1:8000/api/news/ возвращается 405 Method Not Allowed

почему это? что-то не так с моим кодом?

Вот метод store() в контроллере новостей:

    public function store(Request $request)
    {
        $request->validate([
            'title' => 'required',
            'body' => 'required',
            'category_id' => 'nullable|exists:categories,id',
            'tags' => 'array',
            'tags.*' => 'exists:tags,id'
        ]);
    
        $newsItem = new NewsItem;
        $newsItem->title = $request->title;
        $newsItem->body = $request->body;
        $newsItem->category_id = $request->category_id;
        $newsItem->url = $request->url;
        $newsItem->save();
    
        $newsItem->tags()->attach($request->tags);
    
        return response()->json($newsItem, 201);
    }

Если я удалю проверку, вместо этого я получу ошибку 500 с телом: 500Internal Server Error Integrity constraint violation: 1048 Column 'title' cannot be null (SQL: insert into `news_items` (`title`, `body`, `category_id`, `url`, `updated_at`, `created_at`) values (?, ?, ?, ?, 2022-12-31 14:52:26, 2022-12-31 14:52:26))

Но дело в том, что моя полезная нагрузка содержит обязательные поля.

Я не знаю, в чем проблема, почему-то полезная нагрузка не поступает в базу данных.

  • Я могу публиковать новые элементы прямо из базы данных, и App\Model тоже работает нормально, потому что я могу опубликовать с помощью laravel tinker и сохранить его. Но я не могу отправлять сообщения с помощью почтальона.

POST 127.0.0.1:8000/api/news возвращает 405 Method Not Allowed <<<=== сосредоточиться на этом. Если он у вас еще есть, откройте свой api.php и найдите маршрут для /news, скопируйте/вставьте его сюда

UnderDog 31.12.2022 22:08

500Внутренняя ошибка сервера. Нарушение ограничения целостности: 1048 Столбец &#039;title&#039; не может быть нулевым <<<<=== если он у вас все еще есть, опубликуйте результат dd($request->all()); в исходном вопросе

UnderDog 31.12.2022 22:09

Вот маршрут: Route::post('/news', 'App\Http\Controllers\NewsController@store')->name('news.sto‌​re');

Milad 01.01.2023 00:28

Да, у меня все еще есть ошибка. как мне это сделать dd($request->all())?

Milad 01.01.2023 00:30
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

С кодом все в порядке. Основная причина кроется в Postman. Вам нужно установить заголовок Accept: application/json в Postman. (Подсказка заключалась в том, что обработчик приложения возвращал HTML вместо JSON в Postman)

Другие вопросы по теме