Разрабатываю API впервые.
Меня интересуют различные варианты ответа на запрос и способы реализации в Yii.
Три самых распространенных типа ответа:
1. Прошло успешно - 200 OK
2. Ошибка валидации - 400 Bad request
3. Ошибка на стороне сервера - 500 Internal Server Error
Как я понимаю, все ошибки должны быть в одном формате.
Определять есть ошибка или нет буду по коду ответа. Если не 200 тогда тело ответа = тело ошибки.
Подскажите как правильно и грамотно отдавать эти варианты ошибок?
Какие есть методики и форматы выдачи ошибки на интерфейс?
Другие советы и соображения по данному поводу=)
Форматы ответа на запросы
Форматы ответа на запросы
Ищу разработчика или команду разработчиков для поддержки проекта.
Детальнее узнай по ссылке https://goo.gl/YU8uTS.
Детальнее узнай по ссылке https://goo.gl/YU8uTS.
- MetaDriver
- Сообщения: 43
- Зарегистрирован: 2014.04.21, 20:53
- Откуда: Казань
Re: Форматы ответа на запросы
http://habrahabr.ru/post/181988/rafic писал(а):Разрабатываю API впервые.
Меня интересуют различные варианты ответа на запрос и способы реализации в Yii.
..........
Подскажите как правильно и грамотно отдавать эти варианты ошибок?
Какие есть методики и форматы выдачи ошибки на интерфейс?
Другие советы и соображения по данному поводу=)
Там немного насчёт кодов ошибок, и много всяких других полезных соображений по принципам разработки Апи.
Если ещё что-то подобное нароете, сбросьте пожалуйста сюда же, мне будет полезно и интересно почитать.
Что касается реализации на Yii - здесь я малополезен, тоже впервые делаю, пока обхожусь "стандартными" реакциями ActiveController'a, но если приспичит - буду крутиться дальше..
Re: Форматы ответа на запросы
Вот говорила мне бабушка - "Внучек, читай доку внимательнее. За тебя уже все придумали."
Так и тут вышло)
http://www.yiiframework.com/doc-2.0/gui ... dling.html
Получается вот что:
1. Если все Ок, то возвращаем 200 ОК и тело ответа.
2. Если ошибка - тогда используем один из вариантов:
Ошибка валидации - http://www.yiiframework.com/doc-2.0/yii ... ption.html
Ошибка сервера - http://www.yiiframework.com/doc-2.0/yii ... ption.html
Насчет валидации... что, если ошибки возникли по нескольким полям?
Я так полагаю, что нужно выкидывать Exception по каждому сообщению валидации отдельно.
Это будет логично и просто в реализации... но удобно ли пользователям API?
UPD. Вот что я использую для отдачи ошибок.
Так и тут вышло)
http://www.yiiframework.com/doc-2.0/gui ... dling.html
Получается вот что:
1. Если все Ок, то возвращаем 200 ОК и тело ответа.
2. Если ошибка - тогда используем один из вариантов:
Ошибка валидации - http://www.yiiframework.com/doc-2.0/yii ... ption.html
Ошибка сервера - http://www.yiiframework.com/doc-2.0/yii ... ption.html
Насчет валидации... что, если ошибки возникли по нескольким полям?
Я так полагаю, что нужно выкидывать Exception по каждому сообщению валидации отдельно.
Это будет логично и просто в реализации... но удобно ли пользователям API?
UPD. Вот что я использую для отдачи ошибок.
Код: Выделить всё
<?php
/**
* Created by PhpStorm.
* User: Vitaly Voskobovich
* Date: 16.05.14 14:41
*/
namespace app\components\helpers;
use yii\web\HttpException;
use yii\web\ForbiddenHttpException;
use yii\web\NotFoundHttpException;
use yii\web\BadRequestHttpException;
class HttpError
{
/**
* Вызывает ошибку входящих данных - Code 400
* @param string $value
* @throws HttpException
*/
public static function the400($value = 'Bad Request')
{
if(is_array($value))
{
foreach($value as $field => $messages)
{
foreach($messages as $message)
{
$value = "{$field} - {$message}";
break;
}
break;
}
}
throw new BadRequestHttpException($value);
}
/**
* Вызывает ошибку отсутствия записи - Code 404
* @param string $message
* @throws NotFoundHttpException
*/
public static function the404($message = 'Not Found')
{
throw new NotFoundHttpException($message);
}
/**
* Вызывает ошибку доступа - Code 403
* @param string $message
* @throws ForbiddenHttpException
*/
public static function the403($message = 'Forbidden')
{
throw new ForbiddenHttpException($message);
}
/**
* Вызывает ошибку сервера - Code 500
* @param string $message
* @throws \yii\web\HttpException
*/
public static function the500($message = 'Internal Server Error')
{
throw new HttpException(500, $message);
}
}
Ищу разработчика или команду разработчиков для поддержки проекта.
Детальнее узнай по ссылке https://goo.gl/YU8uTS.
Детальнее узнай по ссылке https://goo.gl/YU8uTS.