Может войдёшь?
Черновики Написать статью Профиль

REST API в ваших пакетах

перевод

Зачастую у вас появляется желание предоставить вашим пользователям разные способы взаимодействия с вашим пакетом. Обычным решением является создать REST API к вашему пакету для обработки данных.

Изначально, я хотел получить приятный одностраничный интерфейс для Laravel-FAQ. Для этого в рамках подготовки к этому я работал над созданием гибкого REST API, который позволит добавлять реализованный функционал, когда мне это понадобиться.

Для начала, создайте группу маршрутов с префиксом api в одной из ваших настраиваемых групп маршрутов. Хоть это и может быть настроено через параметр конфигурации, я предпочитаю использовать соглашения, чтобы определённые вещи оставались неизменными. Кроме того, чтобы избежать лишних проблем позже, мы будем использовать явные PHPRoute::get(), PHPRoute::post() и PHPRoute::delete(), чтобы реагировать на наши действия и позволить ссылаться на них через PHProute('laravel-faq::api.questions.*').
Таким образом, наша группа маршрутов выглядит следующим образом:

PHP
Route::group(array('prefix' => 'questions'), function()
{
  
Route::get('/', array('uses' => 'Rtablada\LaravelFaq\Api\QuestionsController@index'));
  
Route::get('all', array('uses' => 'Rtablada\LaravelFaq\Api\QuestionsController@all'));

  
Route::post('/', array('uses' => 'Rtablada\LaravelFaq\Api\QuestionsController@store'));

  
Route::get('search', array('uses' => 'Rtablada\LaravelFaq\Api\QuestionsController@search'));

  
Route::get('{id}', array('uses' => 'Rtablada\LaravelFaq\Api\QuestionsController@show'));
  
Route::delete('{id}', array('uses' => 'Rtablada\LaravelFaq\Api\QuestionsController@delete'));
});

Теперь просто посмотрим на наш контроллер:

PHP
<?php namespace Rtablada\LaravelFaq;

use 
Rtablada\LaravelFaq\Repositories\FaqRepository;
use 
ViewSessionRedirectInputConfig;

class 
QuestionsController extends BaseController
{
    protected 
$faqRepo;

    public function 
__construct(FaqRepository $faqRepo)
    {
        
$this->setupViews();
        
$this->faqRepo $faqRepo;
    }

    public function 
index()
    {
        
$faqs $this->faqRepo->paginate();

        return 
View::make('laravel-faq::home'compact('faqs'));
    }

    public function 
create()
    {
        
$input Session::getOldInput();

        return 
View::make('laravel-faq::questions.create'compact('input'));
    }

    public function 
store()
    {
        
$input Input::all();

        if (
$this->faqRepo->create($input)) {
            
Session::flash('success''Ваш вопрос был обновлён');
            return 
Redirect::route('laravel-faq::index');
        } else {
            return 
Redirect::back()->withInput();
        }
    }

    protected function 
setupViews()
    {
        
$paths Config::get('laravel-faq::views.paths');

        foreach (
$paths as $path) {
            
View::addLocation($path);
        }
    }
}

Быстро и просто, правда? Нужно помнить, что разработка пакета действительно не сильно отличается от разработки очередного приложения на Laravel. Она просто требует несколько дополнительных шагов и решений для того, чтобы сделать пакет более гибким, что позволит его легко подключать и использовать в вашем следующем проекте.

Как вы считаете, полезен ли этот материал? Да Нет

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.