CakePHP REST API устраняет необходимость.формат

Я работаю над созданием REST api, который будет получать и возвращать только данные JSON.

Я следую руководству по торту, и мои маршруты по умолчанию таковы:

GET     /recipes.format
GET     /recipes/123.format
POST    /recipes.format
PUT     /recipes/123.format
DELETE  /recipes/123.format
POST    /recipes/123.format

однако мне очень не нравится необходимость использования ".формат."( "json " в моем случае), так как я буду принимать только json.

Я чувствую, что должен быть способ устранить эту необходимость. Я мог бы использовать .htaccess переписать URL-адреса, но я чувствую, что должен быть способ сделать это в торте настройка / config файла где-то.

короче говоря, я хочу быть Эйб GET /recipes и выведите то же самое, что и GET /recipes.json будет.

спасибо!

2 ответов


Я предполагаю, что вы используете RequestHandler компонент. Один из способов тогда был бы hardcode расширение в контроллерах beforeFilter() обратного вызова:

public function beforeFilter()
{
    parent::beforeFilter();
    $this->RequestHandler->ext = 'json';
}

таким образом, он всегда будет использовать представление JSON и соответствующие заголовки ответов, даже если расширение парсинга включается и не.расширение json было указано в URL-адресе.

другой вариант - использовать RequestHandlerComponent::renderAs() в вашем индивидуальном регуляторе действия:

public function index()
{
    $this->RequestHandler->renderAs($this, 'json');
    ...
}

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


прежде всего, настройте маршрутизатор в .

Router::parseExtensions("json");

затем добавьте компонент RequestHandler в контроллер (он необходим для автоматического распознавания типа MIME по заголовкам HTTP и выбора правильного класса представления).

public $components = array('RequestHandler');

теперь вы можете получить JSON, запрашивающий любой метод контроллера .расширение json,или указав HTTP Accept заголовок с таким же эффектом, без расширения должен быть указанный.

curl -H "Accept: application/json" http://example.com/recipies