Чтобы ограничить размер моих ответов REST API, я хочу реализовать совет по производительности Google : использование параметра строки запроса fields
для частичных ресурсов.
Если у меня есть полный ответ GET https://myapi.com/v1/users
[
{
"id": 12,
"first_name": "Angie",
"last_name": "Smith",
"address": {
"street": "1122 Something St.",
"city": "A city"
..and so on...
}
},
... and so on
]
Я смогу отфильтровать его GET https://myapi.com/v1/users?fields=first_name
[
{
"id": 12,
"first_name": "Angie"
},
... and so on
]
Концепция довольно проста для понимания, но я не могу найти простой способ ее реализации!
Все мои API-ресурсы спроектированы одинаково:
- использовать параметры строки запроса для фильтрации, сортировки, подкачки.
- вызов службы с этими параметрами для выполнения запроса SQL (только условие
WHERE
, условие ORDER BY
и LIMIT
являются динамическими)
- использовать конвертер для форматирования данных обратно в JSON
Но при использовании этого нового параметра fields
что мне нужно делать? где я могу отфильтровать данные?
Нужно ли фильтровать только выходные данные JSON? Но я сделаю (в этом примере) нежелательный запрос JOIN для таблицы адресов и получу ненужные поля в таблице пользователей.
Нужно ли делать динамический SQL-запрос для выборки точно запрошенных полей и добавления JOIN только тогда, когда это нужно конечному пользователю? Тогда конвертер должен быть умным, чтобы преобразовать только доступные поля в запросе SQL.
На мой взгляд, это второе решение создаст чрезвычайно динамический, сложный и сложный в обслуживании код.
Итак, как реализовать такой REST API с функцией частичных ресурсов? Что вы лучше всего практикуете в этом случае?
(я разработчик PHP, но я не думаю, что это актуально для этого вопроса)