Является ли OData подходящим для многозадачного приложения LOB?

Я работаю над облачным бизнес-приложением. Пользователи могут загружать в приложение документы и другие типы объектов. Пользователи загружают довольно много документов и вместе хранят несколько миллионов документов. Я использую SQL Server.

Сегодня у меня есть несколько-restful-API, которые позволяют пользователям проходить в объекте DocumentSearchQuery, где они поставляют ключевое слово вместе с порядком сортировки запроса и информацией подкачки. Они получают обратную копию DocumentSearchResult, которая по существу представляет собой отсортированную коллекцию ссылок на фактические документы.

Теперь я хочу расширить API поиска до других типов сущностей, чем документы, и я изучаю использование OData для этого. Но создается впечатление, что если я использую OData, у меня возникнут проблемы:

  • Не существует встроенного ограничения на то, какие поля пользователи могут запрашивать, что означает, что либо первич будет зависеть от того, будут ли они запрашивать индексированное поле, либо нет, или мне придется реализовать собственный анализ входящих запросов OData, чтобы убедиться, что они запрашивают только индексированные поля , (Поскольку это приложение с несколькими арендаторами и они разделяют физическое оборудование, медленные запросы не очень приемлемы, поскольку они влияют на других клиентов)
  • Все, что я использую для доступа к данным в бэкэнд, должно поддерживать IQueryable. В настоящее время я использую Entity Framework, который делает это, но я, вероятно, буду использовать что-то еще в будущем. Это означает, что, скорее всего, мне нужно снова выполнить собственный анализ входящих запросов.
  • Нет встроенной поддержки для ограничения доступа пользователей данных. Мне нужно проверить входящие запросы Odata, чтобы убедиться, что они получают доступ к данным, на которые у них действительно есть разрешение на доступ.

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

Мой вопрос: учитывая вышеизложенное, использует OData подходящий протокол в среде с несколькими арендаторами, где клиенты пишут собственные клиенты, обращающиеся к объектам?

Я думаю, что здесь подходит. Позвольте мне рассказать вам о проблемах, с которыми вы столкнетесь:

Не существует встроенного ограничения на то, какие поля пользователи могут запрашивать, что означает, что либо первич будет зависеть от того, будут ли они запрашивать индексированное поле, либо нет, или мне придется реализовать собственный анализ входящих запросов OData, чтобы убедиться, что они запрашивают только индексированные поля , (Поскольку это приложение с несколькими арендаторами и они разделяют физическое оборудование, медленные запросы не очень приемлемы, поскольку они влияют на других клиентов)

Правда. Однако вы можете проверить разрешенные поля в фильтре, чтобы разрешить операцию или отклонить ее.

Все, что я использую для доступа к данным в бэкэнд, должно поддерживать IQueryable. В настоящее время я использую Entity Framework, который делает это, но я, вероятно, буду использовать что-то еще в будущем. Это означает, что, скорее всего, мне нужно снова выполнить собственный анализ входящих запросов.

Да, есть провайдер для EF. Это означает, что если вы используете что-то еще в будущем, вам нужно будет написать собственный провайдер. Если вы измените EF, вероятно, вы приняли решение рано. В этом случае я не рекомендую WCF DS.

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

Нет никакой готовой поддержки, чтобы сделать это с помощью служб передачи данных WCF. Однако это часть механизма авторизации, который вам нужно будет реализовать в любом случае. Но у меня есть хорошие новости для вас: с QueryInterceptors это довольно легко. просто перехватывая запрос и, исходя из пользовательских привилегий. Это то, что вам придется реализовать самостоятельно независимо от используемой вами технологии.

Мой ответ: Учитывая вышеизложенное, WCF Data Services является подходящим протоколом в среде с несколькими арендаторами, где клиенты пишут собственные клиенты, обращаясь к сущностям, по крайней мере, вы меняете EF. И вы должны иметь в виду огромные усилия, которые это сэкономит вам.

Interesting Posts

Расчет MDX. Разделите каждого участника на общую сумму

Сделайте слишком короткие входные данные Kingswaysoft

Динамический Создать столбец на сервере sql с типом данных

SQL-сервер xquery

Объединение нескольких таблиц без согласования результата с одним / отсутствием какого-либо значения … Полный Outer Join?

несколько операторов NOT LIKE в одном столбце с условием ИЛИ не работают в SQL

SQL Server Reporting Services 2005 пытается сохранить учетные данные

SQL Server Максимальные строки, которые могут быть вставлены в один элемент вставки

Хранимые процедуры MSSQL2005

Как получить последние 7 дней данных с текущего дня и времени до 7 дней на сервере sql

Как сгенерировать конкретный запрос в SQL Server 2012

Преимущества для Guid Field над nvarchar содержат Guid?

Почему datekey на самом деле таблицы всегда INT?

Получить последнее время и имя для функций пользователей SQL Server

Как мы можем использовать EXEC sp_executesql для двух динамических операторов SQL?

Давайте будем гением компьютера.