REST是使用Web的现有功能和应用的一些原则上它,使之更有效率。 它使用标准的HTTP动词进行通信,并采取了无状态特性的帮助。
然而,这可能是一个REST服务使用TCP协议进行通信? 如果是的话,那么将它违反其原则是什么?
REST是使用Web的现有功能和应用的一些原则上它,使之更有效率。 它使用标准的HTTP动词进行通信,并采取了无状态特性的帮助。
然而,这可能是一个REST服务使用TCP协议进行通信? 如果是的话,那么将它违反其原则是什么?
HTTP是基于TCP / IP协议。 所以,当你使用REST您正在使用TCP进行通信。 但是,如果你想使用REST在纯TCP套接字,没有HTTP,则没有,这不,因为REST是基于HTTP动词,标题意义。 这些概念仅在HTTP协议中存在。
稍有不同的角度:
1。 不要使用WCF创建基于REST的服务。 使用Asp.Net的WebAPI。
2。 只是为了好玩:如果你想使用“REST”牢记原则WCF TCP绑定,也许你可以创建基于“资源”,而不是一个典型的RPC像一个无状态的API。
[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。
由于达林已经回答了 ,HTTP是一些开销,这正是在REST的定义中使用一个TCP协议。 所以,不,你不能删除HTTP开销。
我相信,你的问题“ 我可以使用TCP进行快速的RESTful应用程序?”与这个问题:“ 为什么有这么多的网站使用REST如果HTTP是比纯TCP慢?”有关。
事实是:HTTP确实比纯二进制形式的TCP慢,但在大多数应用中,由于开销实在是非常小的用户不会注意到其中的差别 ,通常客户会令每分钟仅几个请求。
例如: GET /posts?userId=5
如果这个请求的时间超过几毫秒的时间才能完成,那么这个问题是不是在HTTP协议。 性能问题与网络延迟有关,与你的服务器端代码和你如何从数据库中检索数据。
在另一方面,如果您的客户端代码使成千上万每分钟的请求,所以这种单一的客户端会发现与HTTP开销相关的性能问题。 在这种情况下,也许你可以在一个单一的操作批量许多操作,并减少网络请求的数量。
如果一个客户真正需要做每分钟数千的请求,那么你可以考虑在避免休息,并开始寻找另一种方法。 只要记住,SOAP可以使用TCP约束力,但要求也有开销解析个XML。 另外,SOAP是有状态和HTTP是无状态的。 一个有状态的方法是可扩展性差。
您不能使用其他的Http除了基于REST服务绑定。 这是由于休息是基于某些原则的建筑风格。 其中的这个原则是,网络的无状态协议是HTTP的帮助下,也还需要的Http的词语,如获取,港口,PUT和DELETE使用哪个不提供TCP协议