Поддержка ServiceStack для условно пропущенных полей в ответе REST для каждого вызова

<TL;DR>

Как минимум, я ищу способ условно исключить определенные свойства ресурса из включения в ответ для каждого вызова (см.fields ниже).

В идеале я хотел бы реализовать сервис REST с ServiceStack, который поддерживает все основные моменты, приведенные ниже.

ОБНОВИТЬ
Хотя мне действительно нравится подход ServiceStack в целом, и я предпочел бы использовать его, если это возможно, если он не особенно хорошо подходит для этих идей, я бы не стал склоняться над ним, убивая его, чтобы он работал. Если это так, может ли кто-нибудь указать на другую среду C #, которая может быть более подходящей? Конечно, я активно изучаю другие варианты.

</TD;DR>

В этомговорить озаглавленныйРазработка 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/..."
            },
            ...
        ]
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос