Каковы стандарты REST для методов PUT и POST? - PullRequest
0 голосов
/ 10 апреля 2019

Я реализую API в Laravel и получаю комментарий, что мои методы POST и PUT не соответствуют стандартам REST.

Я использую POST для создания нового ресурса и PUT для обновления существующего.Не вижу проблемы.

конечные точки:

Route::post('/cities', [
    'uses' => 'CityController@store'
]);

Route::put('/cities/{id}', [
    'uses' => 'CityController@update'
]);

PUT и POST метод:

public function update(Request $request, $id)
{
    $this->validate($request, [
        'name'      => 'required|min:3',
        'latitude'  => 'required|numeric',
        'longitude' => 'required|numeric'
    ]);

    // update model and only pass in the fillable fields
    $this->cityRepository->update(
        $request->only($this->cityRepository->getModel()->fillable), $id
    );

    return $this->cityRepository->show($id);
}

public function store(Request $request)
{
    $this->validate($request, [
        'name'      => 'required|min:3',
        'latitude'  => 'required|numeric',
        'longitude' => 'required|numeric'
    ]);

    $data = $this->cityRepository->create(
        $request->only($this->cityRepository->getModel()->fillable));

    if ($data) {
        $message = self::SUCCESSFULLY_CREATED;
        $code = self::HTTP_CODE_CREATED;
    } else {
        $message = self::UNSUCCESSFULLY_CREATED;
        $code = 409;
    }

    return $this->sendResponse($message, $data, $code);
}

Отправить ответ:

public function sendResponse($message, $result = [], $code = 200)
    {
        $response = [
            'message' => $message,
        ];

        if (!empty($result)) {
            $response['data'] = $result;
        }

        return response()->json($response, $code);
    }

Показать метод:

 public function show($id)
    {
        return $this->model->findOrFail($id);
    }

1 Ответ

0 голосов
/ 10 апреля 2019

Вы можете вернуть созданный объект из вашего store метода вместо SUCCESSFULLY_CREATED. Кроме того, код выглядит хорошо.

Взгляните на таблицу https://laravel.com/docs/5.8/controllers#resource-controllers,, в которой есть довольно полезное определение REST различных маршрутов CRUD:

GET         /photos                 index       photos.index
GET         /photos/create          create      photos.create
POST        /photos                 store       photos.store
GET         /photos/{photo}         show        photos.show
GET         /photos/{photo}/edit    edit        photos.edit
PUT/PATCH   /photos/{photo}         update      photos.update
DELETE      /photos/{photo}         destroy     photos.destroy

Вот хороший ресурс, для которого вы должны вернуть HTTP-методы:

https://www.restapitutorial.com/lessons/httpmethods.html

...