Я разрабатываю бэкэнд API Rails, совместимый со стандартом JSON-API .Для сериализации своих ресурсов я использую гем Сериализаторы активной модели вместе с адаптером json_api .
В соответствии со спецификацией JSON-API я могу получитьсвязанный ресурс следующим образом:
GET /articles/1/author HTTP/1.1
Accept: application/vnd.api+json
Приведенный выше пример может быть использован для поиска автора статьи.Если автор вышеприведенной статьи отсутствует, запрос GET к этому связанному ресурсу должен возвращаться:
HTTP/1.1 200 OK
Content-Type: application/vnd.api+json
{
"links": {
"self": "http://example.com/articles/1/author"
},
"data": null
}
Я реализовал в своем контроллере следующее действие, которое прекрасно работает, когда автор существует.Если автор отсутствует (т. Е. Ноль), возвращается тело null .Однако я ожидал получить правильный ответ JSON, соответствующий спецификации JSON-API, такой как пример, который я только что представил выше.
def show_author
render json: @article.author, status: :ok
end
Мой текущий обходной путь:
def show_author
author = @article.author
if author.nil?
render json: {data: nil}, status: :ok
else
render json: author, status: :ok
end
end
Кажется, моя реализация не лучший способ обработки объектов nil.Что если мы решим использовать другой адаптер, а не JSON-API?Я что-то упустил?
Я использую:
- Rails 5.1.4
- active_model_serializers 0.10.7