2012-12-26 2 views
13

Usługa REST korzysta z bieżących funkcji sieci Web i stosuje pewne zasady, aby zwiększyć jej wydajność. Używa standardowych czasowników HTTP do komunikacji i pomaga w uzyskaniu bezpaństwowości.Czy mogę używać TCP w usłudze RESTULT?

Czy jest jednak możliwe, że usługa REST korzysta z protokołu TCP do komunikacji? Jeśli tak, to czy naruszy to jego zasady?

+2

Nigdy nie słyszałem, że "zleceniodawcy" REST mają na celu uczynienie go bardziej wydajnym. –

Odpowiedz

18

HTTP jest protokołem opartym na TCP/IP. Więc kiedy używasz REST, już używasz TCP do komunikacji. Ale jeśli chcesz używać REST zamiast zwykłego gniazda TCP, bez HTTP, to nie, to nie ma sensu, ponieważ REST opiera się na czasownikach i nagłówkach HTTP. Te pojęcia istnieją tylko w protokole HTTP.

+0

Ale WCF został opracowany w taki sposób, że zmieniając tylko powiązania, ta sama usługa może działać z protokołem HTTP, TCP, IPC lub innym, co oznacza, że ​​funkcje WCF nie są obsługiwane w usłudze WCF usługi Rest. – funsukvangdu

+4

Możesz używać REST tylko z HTTP. –

+0

Czy to całkowicie prawda, że ​​REST zależy od HTTP? – MBen

0

Nie można używać innych powiązań oprócz Http dla usług opartych na pamięci. Wynika to z faktu, że Rest to styl architektoniczny oparty na pewnej zasadzie. Jedną z tych zasad jest skorzystanie z bezpaństwowego protokołu sieci, który jest http, a także potrzeba użycia słów HTTP, takich jak Get, Port, Put i Delete, które nie są dostępne w protokole TCP

1

Jako Darin już answered, HTTP to protokół TCP z pewnym obciążeniem, który jest dokładnie tym, co jest używane w definicji RESTful. Nie, nie można usunąć obciążenia HTTP.

Wierzę, że pytanie „Czy mogę używać TCP dla szybszego relaksującego app?” związana jest z pytaniem „Dlaczego tak wiele stron internetowych przy użyciu protokołu HTTP REST jeśli jest wolniejszy niż czysta TCP?”.

Prawda jest taka: HTTP jest istotnie mniejsza niż w czystej formie binarnego TCP, ale w najbardziej aplikacji, użytkownicy nie zauważy różnicy ponieważ koszt jest naprawdę bardzo małe i zwykle klient dokona tylko kilka wniosków na minutę.

Na przykład: GET /posts?userId=5

Jeżeli wniosek ten trwa dłużej niż kilka milisekund do wykonania, to problem nie jest w protokole HTTP. Problem z wydajnością jest związany z opóźnieniem sieci, kodem serwera i sposobem pobierania danych z bazy danych.

Z drugiej strony, jeśli kod klienta wykonuje tysiące żądań na minutę, więc ten pojedynczy klient zauważy problem z wydajnością związany z obciążeniem HTTP. W takim przypadku może być możliwe wykonanie wielu operacji wsadowych w ramach jednej operacji i zmniejszenie liczby żądań sieciowych.

Jeśli pojedynczy klient naprawdę potrzebuje tysięcy zgłoszeń na minutę, można pomyśleć o uniknięciu REST i rozpoczęcia poszukiwania innego podejścia. Pamiętaj tylko, że SOAP może używać powiązania TCP, ale żądania mają również narzuty do przetwarzania XML. Ponadto protokół SOAP jest stanowy, a protokół HTTP jest bezstanowy. Stanowe podejście jest gorsze w przypadku skalowalności.

3

Nieco inny kąt:

1. Nie używaj WCF do tworzenia usług opartych na REST. Użyj AspANet WebAPI.

2. Dla zabawy: jeśli chcesz używać wiązań WCF TCP z zasadami "REST", możesz utworzyć bezpaństwowy interfejs API oparty na "zasobach" zamiast typowego RPC, takiego jak jeden.

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

W ten sposób nie trzeba definiować różnych umów dla każdej usługi i po prostu dostosowywać zasoby do różnych interakcji.

UWAGA: Nie sugeruję nikomu, aby to zrobił: wymyśla koło. Użyj WebAPI, jeśli chcesz REST.