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

Могу ли я использовать TCP в службе RESTful?

REST использует текущие функции Интернета и применяет к нему некоторые принципы, чтобы сделать его более эффективным. Он использует стандартные HTTP-глаголы для связи и берет на себя помощь своей безгражданности.

Однако возможно ли, что служба REST использует протокол TCP для связи? Если да, то нарушит ли он его принципы?

4b9b3361

Ответ 1

HTTP - это протокол на основе протокола TCP/IP. Поэтому, когда вы используете REST, вы уже используете TCP для связи. Но если вы хотите использовать REST поверх чистого TCP-сокета, без HTTP, то нет, это не имеет смысла, потому что REST основан на HTTP-глаголах и заголовках. Эти понятия существуют только в протоколе HTTP.

Ответ 2

Немного другой угол:

1. Не используйте WCF для создания служб на основе REST. Используйте Asp.Net WebAPI.

2. Просто для удовольствия: если вы хотите использовать привязки TCP WCF с принципами "REST", возможно, вы можете создать API без состояния, основанный на "ресурсах", вместо типичного RPC, такого как.

[ServiceContract]
interface RestApi
{
    Result Get(string id);
    Result Post(string id, Resource resource);
    Result Put(string id, Resource resource);
    void Delete(string id);
}

Таким образом вам не придется определять разные контракты для каждой службы и просто корректировать ресурсы для разных взаимодействий.

ПРИМЕЧАНИЕ. Я не предлагаю кому-либо сделать это: он изобретает колесо. Используйте WebAPI, если вы хотите REST.

Ответ 3

Поскольку Darin уже ответил, HTTP - это протокол TCP с некоторыми накладными расходами, что и есть то, что используется в определении RESTful. Таким образом, нет, вы не можете удалить служебные данные HTTP.

Я считаю, что ваш вопрос "Могу ли я использовать TCP для более быстрого приложения RESTful?" связан с вопросом "Почему так много сайтов используют REST, если HTTP медленнее, чем чистый TCP?".

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

Например: GET /posts?userId=5

Если этот запрос занимает больше нескольких миллисекунд, то проблема не в протоколе HTTP. Проблема с производительностью связана с задержкой сети, с кодом на стороне сервера и тем, как вы извлекаете данные из своей базы данных.

С другой стороны, если ваш клиентский код производит тысячи запросов в минуту, так что этот единственный клиент заметит проблему с производительностью, связанную с накладными расходами HTTP. В этом случае, возможно, вы могли бы выполнять много операций за одну операцию и уменьшать количество сетевых запросов.

Если одному клиенту действительно нужно делать тысячи запросов в минуту, вы можете подумать о том, чтобы избежать REST и начать искать другой подход. Просто помните, что SOAP может использовать привязку TCP, но запросы также имеют накладные расходы для анализа XML. Кроме того, SOAP является stateful, а HTTP - безстоящим. Для масштабируемости подход с учетом состояния хуже.

Ответ 4

Вы не можете использовать другую привязку, кроме сервисов Http для Rest. Это связано с тем, что Rest - это архитектурный стиль, основанный на определенном принципе. Один из этих принципов заключается в том, чтобы принять помощь протокола без учета состояния Интернета, который является http, также он также хочет, чтобы слова Http, такие как Get, Port, Put и Delete для использования, которые недоступны в TCP-протоколе

Ответ 5

REST - это архитектурный стиль (или набор ограничений). Так уж получилось, что HTTP может легко соответствовать всем этим ограничениям. Кроме того, уже существует множество инфраструктур HTTP/1.1: серверы, прокси, кэши, клиентские библиотеки, парсеры и т.д. Примерно так:

HTTP and REST relationship

Можно ли создавать системы с нуля до RESTful и не полагаться на HTTP? Конечно. Исходя из авторитетного источника по теме Рой Филдинг сам):

API REST не должен зависеть от какого-либо одного протокола связи.

Если вы прочтете статью или на самом деле диссертацию Роя, вы поймете, что, если вы попытаетесь следовать всем ограничениям, вы получите нечто, похожее на современный HTTP, хотя, вероятно, ему не хватит поддержка инфраструктуры. Отсюда вопрос: стоит ли это того?

Также, если вы посмотрите на большинство сервисов RESTful, они очень редко являются полностью сервисами REST. Вот почему они называют себя "RESTful сервисами", а не "REST сервисами". Кстати, этот API сайта очень близок к полной реализации REST.