views:

677

answers:

2

Hi,

I want to build a .NET REST client using C#, and although i read lots of posts here about the common practices regarding REST, i could not make sure about something. I've read lots of REST client examples and most of them were using just HttpWebRequest/Response classes to make the requests and receive the responses. What i want to ask is, what do you think the disadvantages would be if i consume REST services simply this way. I have not used WCF before and i don't have much idea about it either, so i cannot make a comparison by myself.

Using this REST client, i will be getting, updating, posting some data to a device. So, besides from the ease or complexity of the development, my biggest concern is about performance. Do you think the HttpClient in WCF would make a meaningful difference?

Thx in advance..

A: 

I don't think that there will be significant performance differences. However you will end up with much complicated code by using simply HttpWebRequest and Response. For small applications it will be OK, but for more advanced things you will quickly end up in unmaintainable code. With this primitive approach you will need to implement the REST philosophy yourself. On the contrary, WCF has this ready for you and you will only need to focus on your application.

kgiannakakis
ok, got it. thanks :)
davsan
WCF does nothing on the client side to "implement the REST philosophy". HttpClient does make it easier to HTTP properly though. However, you can use HttpClient against any REST interface, WCF is not required.
Darrel Miller
+1  A: 

The HttpClient in the WCF REST starter kit is based on HttpWebRequest and HttpWebResponse. The only dependency it has on WCF is with the HttpContent extension methods that are the in Extensions Dll.

I would recommend using the Microsoft.Http.HttpClient because it adds a HUGE amount of functionality for doing HTTP properly. All of the HTTP headers have wrappers. The HttpContent class takes care of reading and writing from the Request and Response stream. It will buffer the response so that you can read the response multiple times. It has support to make doing async calls much easier.

If you follow the pattern of using extension methods to convert to your native data formats you will find the library really easy work with.

Darrel Miller