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

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

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

ОБНОВИТЬ

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

В этомговорить под названиемРазработка API REST + JSON, докладчик описывает свою стратегию для ссылок на ресурсы (черезhref собственность на ресурсы) в JSON. В дополнение к этому он описывает два параметра запроса (fields а такжеexpand) для контроля того, какие данные включены в ответ на звонок в службу REST. Я'безуспешно пытался вникнуть в каркас ServiceStack, чтобы добиться поддержкиfields в частности, но до сих пор были неудачными. Это возможно в настоящее время в ServiceStack? В идеале решение должно быть независимым от формата и, следовательно, работать со всеми ServiceStack.Поддерживаемые форматы вывода. Я бы вообразилexpand будет следовать той же стратегии.

Я опишу эти функции здесь, но я думаю, что разговор по ссылке лучше объяснит их.

Допустим, у нас есть ресурс Profiles со следующими свойствами:,,givenNamesurnamegender, а также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)

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