我可以在RESTful服务中使用TCP吗?

REST正在使用Web的当前function并在其上应用一些原则以提高其效率。 它使用标准HTTP动词进行通信,并利用其无状态特性。

但是,REST服务是否可以使用TCP协议进行通信? 如果是,那么它会违反其原则吗?

HTTP是基于TCP / IP的协议。 因此,当您使用REST时,您已经在使用TCP进行通信。 但是如果你想在纯TCP套接字上使用REST,没有HTTP,那么不,这没有意义,因为REST基于HTTP动词和头文件。 这些概念仅存在于HTTP协议中。

角度略有不同:

1。 不要使用WCF来创建基于REST的服务。 使用Asp.Net WebAPI。

2。 只是为了好玩:如果你想在WCF TCP绑定中使用’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); } 

这样,您就不必为每项服务定义不同的合同,只需针对不同的交互调整资源。

注意:我并不是建议任何人这样做:它正在重新发明轮子。 如果需要REST,请使用WebAPI。

正如Darin已经回答的那样 ,HTTP是一种TCP协议,其开销正好在RESTful定义中使用。 所以,不,你不能删除HTTP开销。

我相信你的问题“ 我可以使用TCP来获得更快的RESTful应用程序吗? ”与“ 为什么这么多网站使用REST,如果HTTP比纯TCP慢? ”这一问题有关。

事实是:HTTP确实比纯二进制TCP格式慢,但在大多数应用程序中,您的用户不会注意到差异,因为开销实际上非常小,通常客户端每分钟只会发出几个请求。

例如: GET /posts?userId=5

如果此请求需要超过几毫秒才能完成,则问题不在HTTP协议中。 性能问题与网络延迟,服务器端代码以及从数据库中检索数据的方式有关。

另一方面,如果您的客户端代码每分钟发出数千个请求,那么此单个客户端将注意到与HTTP开销相关的性能问题。 在这种情况下,您可以在一次操作中批量处理多个操作并减少网络请求的数量。

如果单个客户端确实需要每分钟发出数千个请求,那么您可以考虑避免REST并开始寻找另一种方法。 请记住,SOAP可以使用TCP绑定,但请求也有解析XML的开销。 此外,SOAP是有状态的,HTTP是无状态的。 对于可伸缩性而言,有状态方法更糟糕。

除了基于Rest的服务的Http之外,您不能使用其他绑定。 这是由于rest是一种基于某种原则的建筑风格。 其中一个原则是借助http的无状态协议,也需要使用在TCP协议中不可用的Get,Port,Put和Delete等Http字样。