За последние 24 часа нас посетили 47068 программистов и 1806 роботов. Сейчас ищут 967 программистов ...

Разработать REST API (CRUD) сервис.

Тема в разделе "PHP для новичков", создана пользователем Dimon2x, 25 июл 2018.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Требуют сделать небольшой GRUD

    - Создание элементов
    - Обновление элементов
    - Удаление элементов
    - Получение информации о элементе

    Я почитал про REST и ничего толком не понял, это тоже самое, что и GRUD для своего сайта?

    Советуют вместо метода POST использовать PUT.
     
  2. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Да, примерно. Только вы не указываете действия в адресах, а используете для этого методы.

    Хотя для браузеров приходится изгаляться, потому что там только GET и POST. Определенное действие может обозначать специфическая комбинация параметров.
     
  3. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    post для создания put patch для обновления
     
  4. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Всё сделал по этой статье https://arjunphp.com/create-rest-laravel-framework/

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

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

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

    Код (Text):
    1. Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException
    2. No message
    И почему роуты надо прописывать в api.php, а не в web.php?
     
  5. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Потому что в web много лишних middleware. Зайди в Http/Kernel и посмотри
    Значит нету такого роута с таким методом вот и ошибка
     
  6. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @nospiou как использовать это API?
     
  7. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Да обычно. Как и веб
    заходишь в routes/api пишешь
    Route::get('/login', 'Api\AuthController@login');
    и получаешь через /api/login
    RouteServiceProvider еще глянь
     
  8. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Я разобрался, надо это прописать http://127.0.0.1:8000/api/task/2

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

    PHP:
    1. Route::get('tasks','TaskController@index');
    2. // get specific task
    3. Route::get('task/{id}','TaskController@show');
    4. // delete a task
    5. Route::delete('task/{id}','TaskController@destroy');
    6. // update existing task
    7. Route::put('task','TaskController@store');
    8. // create new task
    9. Route::post('task','TaskController@store');
    PHP:
    1.  public function destroy($id)
    2.     {
    3.         //Get the task
    4.         $task = Task::find($id);
    5.         if (!$task) {
    6.             return $this->response->errorNotFound('Task Not Found');
    7.         }
    8.         if($task->delete()) {
    9.              return $this->response->withItem($task, new  TaskTransformer());
    10.         } else {
    11.             return $this->response->errorInternalError('Could not delete a task');
    12.         }
    13.     }
    14.     public function store(Request $request)  {
    15.         if ($request->isMethod('put')) {
    16.             //Get the task
    17.             $task = Task::find($request->task_id);
    18.             if (!$task) {
    19.                 return $this->response->errorNotFound('Task Not Found');
    20.             }
    21.         } else {
    22.             $task = new Task;
    23.         }
    24.         $task->id = $request->input('task_id');
    25.         $task->name = $request->input('name');
    26.         $task->description = $request->input('description');
    27.         $task->user_id =  1; //$request->user()->id;
    28.         if($task->save()) {
    29.             return $this->response->withItem($task, new  TaskTransformer());
    30.         } else {
    31.              return $this->response->errorInternalError('Could not updated/created a task');
    32.         }
    33.     }
     
  9. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Ну что б понятнее было приблизительно вот так
    input name="_method" type="hidden" value="DELETE"
    и все это постом
     
  10. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
  11. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Ну если ты на другой сайт обращаешь то да. Если api на js то например axios или jquery настраиваешь.
     
  12. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
  13. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
  14. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Нужные поля

    Вводные данные:
    Сущность: Item
    Поля сущности:
    id - int автоинкремент
    name - char(255)
    key - char(25) not null
    created_at - datetime - дата создания элемента
    updated_at - datetime - дата обновления элемента

    Для чего поле key, что в нём должно быть?
     
  15. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Если он тебе не нужен, удали нафиг.
     
  16. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @mahmuzar в задании написано
     
  17. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    А нету описания, для его он?
     
  18. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    @mahmuzar нету
    --- Добавлено ---
    ладно без него сделаю, надеюсь за это не убьют.
     
  19. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Может влепили для примера. Если он не нужен нигде, не надо его тащить.
     
  20. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
  21. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Dimon2x не показывай это никому:)
     
  22. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    @Dimon2x, такое впечатление, что ты читать тексты не умеешь. Да и примеры. https://github.com/Div-Man/REST-API-Laravel/blob/master/app/Http/Controllers/ItemController.php#L26 - вот это что за бред сивой кобылы? И почему API-контроллер какую-то вьюху дёргает? API - это не для того, чтобы html смотреть, это для того, чтобы из какого-нибудь Angular-а или мобильного приложения дёргать, или с другого сайта (если это публичный сервис) и получать json/xml или что-то а-ля. Явные вызовы json_encode - это лишнее, в статье, которую ты привёл, их нету. И в доке Laravel описано, что он сам это делает, если надо, и тут описано, что для того, чтобы это делать гибче, они установили какой-то пакет...
     
  23. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
  24. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Не у одного тебя такое впечатление :)
    --- Добавлено ---
    @Dimon2x у тебя реальная проблема, ты игнорируешь документацию. Это уже много раз проявилось здесь на форуме и обязательно повредит твоей работе.
     
  25. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Да ему не документация нужна. Ему видео нужно. Что б просто увидеть как что где и для чего делается. Саму суть понять.
    --- Добавлено ---
    Притом полное комплексное с результатом в конце