#rest
#отдых
Вопрос:
Я пытаюсь создать REST API для профилей пользователей на автомобильном веб-сайте. В моем случае в каждом профиле пользователя есть автомобиль, который в зависимости от марки может иметь разные атрибуты.
Прямо сейчас я фиксирую запрос POST на /profiles/{profile_name}
. Ниже приведен пример полезной нагрузки json
{
"car_brand" : "BMW",
"car_data" : {
"engine_size" : "2.0L",
"top_speed" : 200
...
"special_bmw_attribute" : "bmw logo color"
}
}
Как только запрос попадает в мой серверный сервер, я проверяю car_brand
значение и создаю Car
объект, вызывая соответствующий конструктор car с данными из car_data
. Затем я создаю UserProfile
объект с profile_name
и, который имеет созданный автомобиль в качестве атрибута. Наконец, я сохраняю этот UserProfile
объект в своей базе данных.
Является ли это надежным подходом, или есть лучший или более простой способ? Каких подводных камней мне следует опасаться? У меня ограниченный опыт работы с REST API, и я хотел бы знать, двигаюсь ли я в правильном направлении.
Комментарии:
1. Ваш вопрос касается не API, а модели данных. Поделитесь с вами структурой базы данных и диаграммой классов, и мы посмотрим, возможны ли какие-либо оптимизации. После того как вы разработаете модель, вы можете адаптировать REST API к ней, а не наоборот.
2. Да, я вижу, что вопрос немного расплылся. В основном интересно, являются ли ключи car_brand и связанные с ними ключи car_data типичным способом размещения различных атрибутов. Я думал, вы адаптировали API с учетом удобства использования, а не внутренней логики. Извините, если я вас неправильно понял.
3. Ну, я имел в виду, что если за вашей реализацией и скрываются какие-то подводные камни, то они кроются в модели, а не в API. Говоря об API, я думаю, вы ответили на свой вопрос: если его можно использовать только с точки зрения клиента, тогда все в порядке. Подумайте, однако, об извлечении атрибутов, общих для всех брендов (engine_size, top_speed и т.д.), В отдельный объект. Все остальные предпочтительно рассматривать как карту вспомогательных атрибутов.