Подтвердить что ты не робот

OData с ServiceStack?

Я только что увидел ServiceStack, и я рассматриваю возможность создания с ним службы.

Можно ли подавать фиды OData со стеком службы, чтобы я мог открыть IQueryable и запросить его у клиента?

4b9b3361

Ответ 1

Изменить

ServiceStack теперь добавил Auto Query, который является нашим подходом к включению служб, управляемых данными, которые позволяют избежать ловушки и анти-шаблоны, продвигаемые OData.


Будет ли ServiceStack поддерживать OData.

Нет.

Не так или иначе. Если кто-либо видит какую-либо ценность в OData, они могут добавлять необходимые функциональные возможности в качестве необязательного Plugin - но он никогда не будет встроен в Ядро ServiceStack.

Плохие методы развития

OData плохо подходит для ServiceStack, который яростно выступает против тяжелых абстракций и "магического поведения", который мы рассматриваем как классический пример:

Каждую минуту вы сохраняете, когда ваша фантастическая структура делает магические вещи для поможет вам в будущем - вы десять минут отладки. Не стоит.

Мы не думаем, что полагаться на магическое поведение из черных ящиков никогда не будет длиться испытание временем. Исторически, когда мы использовали это (например, ADO.NET DataSets, Динамические данные ASP.NET), мы быстро сталкиваемся с присущими им гибкими ограничениями этих фреймворков, которые способны развиваться, чтобы поддерживать новые методы, парадигмы и технологии разработчиков, которые они не были предназначены для поддержки, в результате будучи быстро устаревшим в пользу более новых рамок, которые могут. Это цикл повторной записи, который мы не хотим продвигать.

Продвигает плохие методы веб-сервиса

OData также способствует анти-шаблону, в котором вы подвергаете внутреннюю информацию о деталях своих служб, тесно связывая ваш неявный контракт на обслуживание с базовыми таблицами РСУБД, что дает вам ограниченный контроль над кэшированием, повторным факторингом или версии ваших возможностей в будущем.

Это похоже на передачу вашей строки соединения db, где, как только у вас есть клиенты, связанные с производством, структура таблиц становится замороженной, что препятствует развитию ваших существующих таблиц БД, поскольку это может потенциально нарушить существующих клиентов. Рекомендация ServiceStack заключается в том, что ваши клиенты привязаны к четко определенному уровню обслуживания, что вы можете повторно подвергнуть повторному внедрению.

Подводя итог, OData действительно предоставляет богатые функциональные возможности, но я лично не рекомендую его использовать за пределами интрасети, где вы не контролируете и не можете развертывать как клиент, так и сервер.

WebApi - лучший вариант с неявной поддержкой oData путем возврата интерфейса IQueryable<T>.

Используется только в технологиях Microsoft

Одним из основных преимуществ веб-/удаленных сервисов (и, в частности, SOA) является то, что он обеспечивает технологически-агностический и совместимый фасад над любой функциональностью, которую вы хотите разоблачить. Хотя OData является открытым стандартом, сама технология по существу только была принята Microsoft и . Связанные с NET инициативы.

OData медленный

OData сам оказался медленным (что противоречит нашим основным целям), а отсутствие контроля над реализацией затрудняет для того, чтобы чисто внедрять технологии повышения производительности, такие как кеширование по ней.

Конкретный пример

Я привел конкретный пример в комментариях о том, почему oData - плохая идея, в конце IQueryable - это плотная связь сообщение, которое я повторю здесь для сохранения:

Вся идея интерфейсов веб-сервисов заключается в технологически-агностический API, совместимый с внешним миром.

Предоставление конечной точки IQueryable/OData эффективно связывает вашу услуги по использованию OData на неопределенный срок, поскольку вы не сможете сделать это определить, к чему привязаны существующие клиентские пространства. существующие запросы/таблицы/представления/свойства, необходимые для замораживания/поддержки на неопределенный срок. Это проблема при раскрытии любой реализации на поверхности вашего API, поскольку это ограничивает вашу способность добавлять собственные пользовательская логика на нем, например. Авторизация, кэширование, мониторинг, Rate-Limiting и т.д. И поскольку OData действительно медленная, вы попадете проблемы с ранжированием/масштабированием. Отсутствие контроля над конечная точка, означает, что вы действительно направляетесь на переписывание: https://coldie.net/?tag=servicestack

Давайте посмотрим, насколько осуществимым будет переход от поставщика OData путем просмотра существующего запроса из Netflix OData апи:

http://odata.netflix.com/Catalog/Titles? $filter = Тип %20eq %20'Movie ' %20 и %20 (Рейтинг %20eq %20'G ' %20or %20Rating %20eq %20'PG-13')

Эта услуга теперь эффективно связана с таблицей/представлением "Заголовки" с столбцом "Тип".

И как это было бы естественно написано, если вы не использовали OData:

http://api.netflix.com/movies?ratings=G,PG-13

Теперь, если по какой-то причине вам нужно заменить реализацию существующий сервис (например, появилась лучшая технологическая платформа, он работает слишком медленно, и вам нужно переместить этот набор данных на NoSQL/Full-TextIndexing-backed sln), сколько усилий потребуется замените OData impl (который эффективно привязан к схеме РСУБД и OData binary impl) к более интуитивно-понятному запросу-агностику ниже? Это не невозможно, но поскольку это внедрить OData API для новой технологии, которая переписывает + ломает существующие клиенты, как правило, являются предпочтительным вариантом.

Предоставление внутренних реализаций диктует внешний внешний адрес структура - это верный способ разбить существующих клиентов, когда необходимо изменение. Вот почему вы должны предоставлять свои услуги за Cool URI, то есть логические постоянные URL-адреса (которые беспрепятственно реализуются) которые не меняются, поскольку вы, как правило, не хотите ограничивать технологический выбор ваших услуг.

Это может быть хорошим вариантом, если вы хотите доставить adhoc 'exploratory услуг ", но это не то, что я когда-либо хотел бы получить от внешних клиентов привязанный в производственной системе. И если я только ограничу его используйте мою локальную интрасеть, какие преимущества у нее есть, введите строку подключения только для чтения? которые позволят другим использовать их любимый Sql Explorer, Reporting или любые другие инструменты, которые говорят SQL.

Update

Netflix имеет только удалил свой каталог OData, начиная с 8 апреля 2013 г..

Добавлен новый ответ на почему мы рекомендуем использовать чистый, четко определенный незанятый DTO для определения любых удаленных сервисов с, который является передовым опытом удаленных служб, который использует OData не способствует.

Хорошая статья о том, почему основанные на API API, такие как OData, намного более хрупкие, сложные и сложнее в использовании, чем эквивалентные API-интерфейсы на основе намерений.