Consuming REST Services from C# SoftUni Team Technical Trainers Software University

Slides:



Advertisements
Similar presentations
Software Quality Assurance QA Engineering, Testing, Bug Tracking, Test Automation Software University Technical Trainers SoftUni Team.
Advertisements

C# Advanced Topics Methods, Classes and Objects SoftUni Team Technical Trainers Software University
AngularJS Routing Routes, Route Parameters, Templates, Location, Navigation SoftUni Team Technical Trainers Software University
Using MongoDB with.NET Welcome to the JSON-stores world SoftUni Team Technical Trainers Software University
AngularJS Services Built-in and Custom Services SoftUni Team Technical Trainers Software University
Methods Writing and using methods, overloads, ref, out SoftUni Team Technical Trainers Software University
Software University Curriculum, Courses, Exams, Jobs SoftUni Team Technical Trainers Software University
Testing Web Services Unit Testing, Data Layer Testing, Web API Controllers Testing, Integration Testing Web Services & Cloud SoftUni Team testing Technical.
Fundamentals SoftUni Welcome to Software University SoftUni Team Technical Trainers Software University
Project Tracking Tools Trello, Asana, Basecamp, GitHub Issue Tracker, TRAC SoftUni Team Technical Trainers Software University
AngularJS Directives Defining Custom Directives SoftUni Team Technical Trainers Software University
Software Testing Lifecycle Exit Criteria Evaluation, Continuous Integration Ivan Yonkov Technical Trainer Software University.
Design Patterns: Structural Design Patterns
High-Quality Programming Code Code Correctness, Readability, Maintainability, Testability, Etc. SoftUni Team Technical Trainers Software University
JavaScript Design Patterns Private Fields, Module, Revealing Module, Revealing Prototype, … Software University Technical Trainers SoftUni.
Conditional Statements Implementing Control-Flow Logic in C# SoftUni Team Technical Trainers Software University
Composer packages Installing and Using Composer, Packagist, Packaging your code Mario Peshev Technical Trainer Software University
Loops Repeating Code Multiple Times SoftUni Team Technical Trainers Software University
Start Your Own Blog Angel Georgiev Part-time Trainer angeru.softuni-friends.org Software University The Culture of Knowledge Sharing.
Database APIs and Wrappers
Entity Framework Performance SoftUni Team Technical Trainers Software University
Microsoft Azure SoftUni Team Technical Trainers Software University
Svetlin Nakov Technical Trainer Software University
Build Processes and Continuous Integration Automating Build Processes Software University Technical Trainers SoftUni Team.
Processing Redis with.NET How to Operate with Redis Databases SoftUni Team Technical Trainers Software University
Multidimensional Arrays, Sets, Dictionaries Processing Matrices, Multidimensional Arrays, Dictionaries, Sets SoftUni Team Technical Trainers Software University.
Project Tracking Tools Trello, Asana, Basecamp, GitHub Issue Tracker, TRAC Angel Georgiev Part-time Trainer Software University
Test-Driven Development Learn the "Test First" Approach to Coding SoftUni Team Technical Trainers Software University
AMD and RequireJS Splitting JavaScript Code into Dependent Modules Software University Technical Trainers SoftUni Team.
Asynchronous Web Services Writing Asynchronous Web Services SoftUni Team Technical Trainers Software University
Asynchronous Programming Writing Asynchronous Code in C# SoftUni Team Technical Trainers Software University
Web Fundamentals (HTML and CSS) Course Introduction SoftUni Team Technical Trainers Software University
Jekyll Static Site Generator Template-Based Site Generation Svetlin Nakov Technical Trainer Software University
Forms Overview, Query string, Submitting arrays, PHP & HTML, Input types, Redirecting the user Mario Peshev Technical Trainer Software.
JavaScript Modules and Patterns Private Fields, Module, Revealing Module, Revealing Prototype, … Software University Technical Trainers.
Web Development Tools Tools for Front-End Developers Writing HTML and CSS Code SoftUni Team Technical Trainers Software University
ASP.NET SignalR SoftUni Team Technical Trainers Software University
Responsive Design Design that Adapts to Different Devices SoftUni Team Technical Trainers Software University
Processing JSON in.NET JSON, JSON.NET LINQ-to-JSON and JSON to XML SoftUni Team Technical Trainers Software University
Tables, Rows, Columns, Cells, Header, Footer, Colspan, Rowspan
High-Quality Programming Code Code Correctness, Readability, Maintainability Svetlin Nakov Technical Trainer Software University
CSS Transitions and Animations Animated HTML Elements SoftUni Team Technical Trainers Software University
Design Patterns: Structural Design Patterns General and reusable solutions to common problems in software design Software University
Prototype Chain and Inheritance Prototype chain, Inheritance, Accessing Base Members Software University Technical Trainers SoftUni Team.
Events Event Handling in JavaScript SoftUni Team Technical Trainers Software University
Reflection Programming under the hood SoftUni Team Technical Trainers Software University
Mocking with Moq Tools for Easier Unit Testing SoftUni Team Technical Trainers Software University
Mocking Unit Testing Methods with External Dependencies SoftUni Team Technical Trainers Software University
Mocking with Moq Mocking tools for easier unit testing Svetlin Nakov Technical Trainer Software University
ORM Basics Repository Pattern, Models, Entity Manager Ivan Yonkov Technical Trainer Software University
Test-Driven Development Learn the "Test First" Approach to Coding Svetlin Nakov Technical Trainer Software University
Sets, Dictionaries SoftUni Team Technical Trainers Software University
Creating Content Defining Topic, Creating Technical Training Materials SoftUni Team Technical Trainers Software University
Doctrine The PHP ORM SoftUni Team Technical Trainers Software University
Creating Content Defining Topic, Creating Technical Training Materials SoftUni Team Technical Trainers Software University
Asynchronous Programming Writing Concurrent Code in C# SoftUni Team Technical Trainers Software University
Web Storage and Cookies Cookies, Local and Session Storage SoftUni Team Technical Trainers Software University
First Steps in PHP Creating Very Simple PHP Scripts SoftUni Team Technical Trainers Software University
AngularJS Best Practices High Quality SPA Applications SoftUni Team Technical Trainers Software University
Inheritance Class Hierarchies SoftUni Team Technical Trainers Software University
Static Members Static Variables & Methods SoftUni Team Technical Trainers Software University
Stacks and Queues Processing Sequences of Elements SoftUni Team Technical Trainers Software University
Generics SoftUni Team Technical Trainers Software University
Asynchronous Programming Writing Asynchronous Code in Java SoftUni Team Technical Trainers Software University
Auto Mapping Objects SoftUni Team Database Applications
Introduction to MVC SoftUni Team Introduction to MVC
ASP.NET Integration Testing
Mocking tools for easier unit testing
State Management Cookies, Sessions SoftUni Team State Management
Extending functionality using Collections
Presentation transcript:

Consuming REST Services from C# SoftUni Team Technical Trainers Software University

Table of Contents 1.Consuming Web Services – Overview 2.Using HttpClient  Asynchronous API with async / await 3.Using RestSharp 2

HttpClient  Modern HTTP client for.NET  Flexible API for accessing HTTP resources  Has only async methods  Using the new TAP (Task-based Asynchronous Pattern)  Sends and receives HTTP requests and responses  HttpRequestMessage, HttpResponseMessage  Responses / requests are accessed through async methods  Can have defaults configured for requests

4  *Async().Result blocks the program until a result is returned Sending a GET Request string GetAllPostsEndpoint = " var httpClient = new HttpClient(); var response = httpClient.GetAsync(GetAllPostsEndpoint).Result; var postsJson = response.Content.ReadAsStringAsync().Result; Console.WriteLine(postsJson); // [{"id":1,"content":"...","author":"peicho","likes":0}, // {"id":2,"content":"...",... }]

5  Microsoft.AspNet.WebApi.Client adds the ReadAsAsync extension method Converting Response to Object var httpClient = new HttpClient(); var response = httpClient.GetAsync(GetAllPostsEndpoint).Result; var posts = response.Content.ReadAsAsync >().Result;.ReadAsAsync >().Result; foreach (PostDTO post in posts) { Console.WriteLine(post); Console.WriteLine(post);} public class PostDTO { public int Id { get; set; } public int Id { get; set; } public string Content { get; set; } public string Content { get; set; } public string Author { get; set; } public string Author { get; set; } public int Likes { get; set; } public int Likes { get; set; }}

6 Sending a POST Request var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Add( "Authorization", "Bearer " + "{token}"); var content = new FormUrlEncodedContent(new[] { new KeyValuePair ("content", "nov post"), new KeyValuePair ("content", "nov post"), new KeyValuePair ("wallOwnerUsername", "peicho") new KeyValuePair ("wallOwnerUsername", "peicho")}); var response = httpClient.PostAsync(AddNewPostEndpoint, content).Result;.PostAsync(AddNewPostEndpoint, content).Result;... Manually set custom request header Send data in request body

7  HttpClient does not support adding query string parameters  Can be done with UriBuilder and HttpUtility Building Query Strings const string Endpoint = "api/users/search"; var builder = new UriBuilder(Endpoint); var query = HttpUtility.ParseQueryString(string.Empty); query["name"] = "мо"; query["minAge"] = "18"; query["maxAge"] = "50"; builder.Query = query.ToString(); Console.WriteLine(builder); // api/users/search?name=%u043c%u043e&minAge=18&maxAge=50 Escapes special characters

Simple HttpClient Requests Live Demo

Asynchronous Programming

10  Synchronous code is executed step by step Synchronous Code 10 static void Main() 11 { 12 int n = int.Parse(Console.ReadLine()); 13 PrintNumbersInRange(0, 10); 14 Console.WriteLine("Done."); 15 } static void PrintNumbersInRange(int a, int b) 18 { 19 for (int i = a; i <= b; i++) 20 { 21 Console.WriteLine(i); 22 } 23 } int n = int.Parse(..) PrintNumbersInRange() Console.WriteLine(..)...

11  Asynchronous programming allows the execution of code simultaneously Asynchronous Code int n = int.Parse(..) for (0..10) Console.WriteLine(..) for (10..20) static void Main() { int n = int.Parse(Console.ReadLine()); int n = int.Parse(Console.ReadLine()); PrintNumbersInRange(0, 10); PrintNumbersInRange(0, 10); var task = Task.Run(() => var task = Task.Run(() => PrintNumbersInRange(10, 20)); PrintNumbersInRange(10, 20)); Console.WriteLine("Done."); Console.WriteLine("Done."); task.Wait(); task.Wait();} Wait()

12  The keywords async and await are always used together  async hints the compiler that the method might run in parallel  Does not make a method run asynchronously ( await makes it)  Tells the compiler "this method could wait for a resource or operation"  If it starts waiting, return to the calling method  When the wait is over, go back to called method Tasks with async and await async void PrintAllPosts(string file, int parts)

13  await is used in a method which has the async keyword  Saves the context in a state machine  Marks waiting for a resource (a task to complete)  Resource should be a Task  Returns T result from Task when it completes Tasks with async and await (2) await PrintAllPosts("localhost:55231/api/posts"); Returns Task Returns Task

14 async and await – Example static void Main() { PrintAllPostsAsync("localhost:55231/api/posts"); PrintAllPostsAsync("localhost:55231/api/posts");......} static async void PrintAllPostsAsync(string endPoint) { var httpClient = new HttpClient(); var httpClient = new HttpClient(); Console.WriteLine("Fetching posts..."); Console.WriteLine("Fetching posts..."); var response = await httpClient.GetAsync(endPoint); var response = await httpClient.GetAsync(endPoint); var posts = await response.Content.ReadAsAsync >(); var posts = await response.Content.ReadAsAsync >(); foreach (var post in posts) foreach (var post in posts) {Console.WriteLine(post); } Console.WriteLine("Download successful."); Console.WriteLine("Download successful.");} The calling thread exits the method on await Everything after that will execute when the *Async() method returns a result

Graphical User Interface Live Demo

RESTSharp

 Simple REST and HTTP API client for.NET  Supported in older versions of.NET (before 4.5)  Available in NuGet RESTSharp var client = new RestClient(); client.BaseUrl = new Uri(" var request = new RestRequest("students/{id}", Method.GET); request.AddUrlSegment("id", "5"); var response = client.Execute(request); Console.WriteLine(response.Content);

? ? ? ? ? ? ? ? ? Consuming REST Services with C#

License  This course (slides, examples, demos, videos, homework, etc.) is licensed under the "Creative Commons Attribution- NonCommercial-ShareAlike 4.0 International" licenseCreative Commons Attribution- NonCommercial-ShareAlike 4.0 International 19  Attribution: this work may contain portions from  "Web Services and Cloud" course by Telerik Academy under CC-BY-NC-SA licenseWeb Services and CloudCC-BY-NC-SA

Free Software University  Software University Foundation – softuni.orgsoftuni.org  Software University – High-Quality Education, Profession and Job for Software Developers  softuni.bg softuni.bg  Software Facebook  facebook.com/SoftwareUniversity facebook.com/SoftwareUniversity  Software YouTube  youtube.com/SoftwareUniversity youtube.com/SoftwareUniversity  Software University Forums – forum.softuni.bgforum.softuni.bg