Я стараюсь оставаться разумно 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, или это просто условие, когда все ломается, и вы выбираете компромисс?