5. WCF Web Api - consuming simple Get service
Coś na ząb ;) Skonsumujmy prosty serwis Web Api
Poprzednio:
Rest = zasób + reprezentacja.
Ostatnio stworzyłam zasób, ale nie było mowy o reprezentacji.
Kiedy próbowałam napisać coś restful w WCFie irytowało mnie że w pewnym momencie trzeba było podać JSON czy XML. Być może wtedy nie wnikałam wystarczająco głęboko ;)
W Web Api nic żeśmy nie określali a przeglądarka od razu potrafiła odczytać XML.
Posługując się Fiddlerem łatwo jest pokazać jak uzyskać XML albo JSONa.
XML (domyślnie): Wynik:
JSON - wystarczy podać Accept: application/json aby dostać wyniki w formacie Json I to jest to co dostajemy z pudełka - o ile nie mamy żadnych bardziej skomplikowanych danych jak choćby obrazków (to potem).
Web Api udostępnia również klasę klienta rest: HttpClient
Najprostszy przypadek Xml:
Z Jsonem jest troszkę trudniej bo trzeba przekazać informację że chcemy jsona do wywołania serwisu.
- 1. REST - small introduction
- 2. WCF Web Api - linkownia
- 3. WCF Web Api - szybki start
- 4. WCF Web Api - simple GET
Rest = zasób + reprezentacja.
Ostatnio stworzyłam zasób, ale nie było mowy o reprezentacji.
Kiedy próbowałam napisać coś restful w WCFie irytowało mnie że w pewnym momencie trzeba było podać JSON czy XML. Być może wtedy nie wnikałam wystarczająco głęboko ;)
W Web Api nic żeśmy nie określali a przeglądarka od razu potrafiła odczytać XML.
Posługując się Fiddlerem łatwo jest pokazać jak uzyskać XML albo JSONa.
XML (domyślnie): Wynik:
JSON - wystarczy podać Accept: application/json aby dostać wyniki w formacie Json I to jest to co dostajemy z pudełka - o ile nie mamy żadnych bardziej skomplikowanych danych jak choćby obrazków (to potem).
Web Api udostępnia również klasę klienta rest: HttpClient
Najprostszy przypadek Xml:
HttpClient httpClient = new HttpClient(); HttpResponseMessage res = httpClient.Get("http://localhost/WebApiTests/api/contacts"); if (res.StatusCode == System.Net.HttpStatusCode.OK) { textBox1.Text += res.Content.ReadAsString(); //jakoś wole TextBoxy w WinFormsach niż aplikacje konsolowe } else { // w razie niepowodzenia wypisz tylko status textBox1.Text += res.StatusCode.ToString(); }Output:
<?xml version= "1.0 " encoding= "utf-8 "?>
<ArrayOfContact>
<Contact>
<ContactId> 1</ContactId>
<Name> Glenn Block</Name>
</Contact>
<Contact>
<ContactId> 2</ContactId>
<Name> Howard Dierking</Name>
</Contact>
</ArrayOfContact>
HttpClient httpClient = new HttpClient(); var request = new HttpRequestMessage() { Method = HttpMethod.Get, RequestUri = new Uri("http://localhost/WebApiTests/api/contacts") }; //Dodajemy dokładnie to samo co w Fiddlerze - "Accept" request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); HttpResponseMessage responseJason = null; responseJason = httpClient.Send(request, HttpCompletionOption.ResponseHeadersRead); if (responseJason != null) { if (responseJason.StatusCode == System.Net.HttpStatusCode.OK) { textBox1.Text += responseJason.Content.ReadAsString(); } else { textBox1.Text += responseJason.StatusCode.ToString(); } } /*Output: [{"ContactId":1,"Name":"Glenn Block"},{"ContactId":2,"Name":"Howard Dierking"}] */
Komentarze
Prześlij komentarz