2015-05-17 4 views
0

Я стараюсь оставаться разумно RESTful с моим дизайном api, и одной из конечных точек, которые мне нужны, чтобы сгенерировать что-то эквивалентное левому соединению, и я не был слишком доволен любым из варианты, которые я придумал.Представление LEFT JOIN в конечной точке REST

У меня есть некоторые ресурсы устройства, и мне нужна конечная точка, которая будет выводить устройства вместе с их последним AccessRecord. Иногда у них не будет AccessRecord, если это недавно подготовленное устройство, но я все еще хочу его в списке. Это чувствует себя очень не-REST, представляя ресурс, который не существует, но потребности - это потребности.

Я думал о следующих подходах:

1)/устройства/last_access_records возвращает массив ресурсов устройств с дополнительным «last_access_record» добавлены поля.

2)/devices/last_access_records возвращает массив кортежей Device, AccessRecord, при этом AccessRecord имеет значение NULL, если оно не существует.

3)/devices/last_access_records возвращает массив корней Device, AccessRecord и не включает устройства, которые не имеют каких-либо AccessRecords, и требуют, чтобы пользователь api совершил второй вызов/устройства, чтобы получить все устройства и сделать свой собственный diff.

И еще несколько других.

3 кажется наиболее правильным с точки зрения дизайна api, а 2 - приятным и Erlang-y, но кортежи не переводят хорошо на json.

Есть ли какие-либо другие четкие/чистые способы представления такого рода вещей в RESTful api, или это просто условие, когда все ломается, и вы выбираете компромисс?

ответ

0

Это может ответить на ваш вопрос, и я считаю, что согласен с вариантом 2 (иметь значение, если оно не равно нулю и переведет ее иначе): https://google-styleguide.googlecode.com/svn/trunk/jsoncstyleguide.xml#Empty/Null_Property_Values

Я думаю, что ваш первой или второй вариант хорошо работает ли вы явно имеют значение NULL как значение AccessRecord или опуская его, если нет значения (последнее имеет больше пространства/времени.) Я думаю, что вариант 1 более подходит, если AccessRecord является свойством устройства в вашем дизайне; вариант 2 в противном случае.

Смежные вопросы