Поддержка ServiceStack для условно пропущенных полей в ответе REST для каждого вызова
Как минимум, яя ищу способ условно исключить определенные свойства ресурса из включения в ответ для каждого вызова (см.fields
ниже).
В идеале яЯ хотел бы реализовать сервис REST с ServiceStack, который поддерживает все основные пункты ниже.
ОБНОВИТЬ
Хотя мне очень нравится ServiceStack 'подход в целом и предпочел бы использовать его, если это возможно, если это не такЯ не очень хорошо отношусь к этим идеям.я бы не стал наклоняться назад, убивая его, чтобы он заработал. Если это'В таком случае, кто-нибудь может указать на другую среду C #, которая может быть более подходящей? Я'Я, конечно, активно изучаю другие варианты.
В этомговорить под названиемРазработка API REST + JSON, докладчик описывает свою стратегию для ссылок на ресурсы (черезhref
собственность на ресурсы) в JSON. В дополнение к этому он описывает два параметра запроса (fields
а такжеexpand
) для контроля того, какие данные включены в ответ на звонок в службу REST. Я'безуспешно пытался вникнуть в каркас ServiceStack, чтобы добиться поддержкиfields
в частности, но до сих пор были неудачными. Это возможно в настоящее время в ServiceStack? В идеале решение должно быть независимым от формата и, следовательно, работать со всеми ServiceStack.Поддерживаемые форматы вывода. Я бы вообразилexpand
будет следовать той же стратегии.
Я опишу эти функции здесь, но я думаю, что разговор по ссылке лучше объяснит их.
Допустим, у нас есть ресурс Profiles со следующими свойствами:,,givenName
surname
gender
, а такжеfavColor
, Ресурс Profiles также включает в себя список социальных сетей, к которым принадлежит пользователь вsocialNetworks
имущество.
href
- (42:22 в видео) Каждый ресурс содержит полную ссылку на него в сервисе REST. ВызовGET /profiles/123
вернется
{
"href":"https://host/profiles/123",
"givenName":"Bob",
"surname":"Smith",
"gender":"male",
"favColor":"red",
"socialNetworks": {
"href":"https://host/socialNetworkMemberships?profileId=123"
}
}
Обратите внимание, чтоsocialNetworks
свойство возвращает объект только с заполненным значением href. Это делает ответ коротким и целенаправленным, а также дает конечному пользователю достаточно информации для выполнения дальнейших запросов, если это необходимо.href
Свойство, используемое повсеместно в этом поместье, упрощает (в любом случае концептуально) повторное использование структур данных ресурсов в качестве дочерних элементов других ресурсов.
fields
- (55:44 в видео) Параметр строки запроса, который указывает серверу включать только указанные свойства требуемого ресурса в ответ REST.
Нормальный ответ отGET /profiles/123
будет включать в себя все свойства ресурса, как показано выше. Когдаfields
Параметр запроса включен в запрос, возвращаются только указанные поля. 'GET / propfiles / 123? Fields = фамилия, favColor ' вернется
{
"href":"https://host/profiles/123",
"surname":"Smith",
"favColor":"red"
}
expand
- (45:53 в видео) Параметр строки запроса, который указывает серверу конкретизировать указанные дочерние ресурсы в результате. Используя наш пример, если вы должны были позвонитьGET /profiles/123?expand=socialNetworks
вы можете получить что-то вроде
{
"href":"https://host/profiles/123",
"givenName":"Bob",
"surname":"Smith",
"gender":"male",
"favColor":"red",
"socialNetworks": {
"href":"https://host/socialNetworkMemberships?profileId=123",
"items": [
{
"href":"https://host/socialNetworkMemberships/abcde",
"siteName":"Facebook",
"profileUrl":"http://www.facebook.com/..."
},
...
]
}
}