SlideShare uma empresa Scribd logo
1 de 31
ASP.NET WEB API

          @thangchung
           08-08-2012
Agenda
•   A model of restful maturity
•   ASP.NET Web API
•   Mapping from WCF to Web API
•   Integrated stack supporting features
•   What we do in BC Survey project
A model of restful maturity
• Restful coined by Roy Thomas Fielding in his
  dissesertation (2000)
• A model of restful maturity introduced by
  Leonard Richardson (2008)
• The glory of REST by Martin Fowler (2010)
• We have 4 levels of maturity
  –   Level 0: The swamp of POX (Plain Old XML)
  –   Level 1: Resources
  –   Level 2: HTTP verbs
  –   Level 3: Hypermedia Controls
Level 0: The swamp of POX
• Use RPC (Remote Procedure Invocation)




• POST /appointmentService HTTP/1.1 [various
  other headers]
     <openSlotRequest date = "2010-01-04" doctor =
          "mjones"/>
• The server return an open slot list as
   HTTP/1.1 200 OK [various headers]
      <openSlotList>
       <slot start = "1400" end = "1450">
             <doctor id = “mjones”/>
       </slot>
       <slot start = "1600" end = "1650">
             <doctor id = “mjones”/>
       </slot>
     </openSlotList>
• We choose the the first item and send it to server:
   POST /appointmentService HTTP/1.1 [various other headers]
      <appointmentRequest>
             <slot doctor = "mjones" start = "1400" end =
                     "1450"/>
             <patient id = "jsmith"/>
      </appointmentRequest>
• The server accept this request and register
  name of patient
  HTTP/1.1 200 OK [various headers]
     <appointment>
      <slot doctor = "mjones" start = "1400" end = "1450"/>
      <patient id = "jsmith"/>
     </appointment>
• If some thing wrong, the result should be
  HTTP/1.1 200 OK [various headers]
  <appointmentRequestFailure>
     <slot doctor = "mjones" start = "1400" end = "1450"/>
     <patient id = "jsmith"/>
     <reason>Slot not available</reason>
     </appointmentRequestFailure>
Level 1: Resources
• POST /doctors/mjones HTTP/1.1 [various
  other headers]
  <openSlotRequest date = "2010-01-04"/>
• HTTP/1.1 200 OK [various headers]
  <openSlotList>
   <slot id = "1234" doctor = "mjones" start = "1400"
            end = "1450"/>
   <slot id = "5678" doctor = "mjones" start = "1600"
            end = "1650"/>
  </openSlotList>
• POST /slots/1234 HTTP/1.1 [various other
  headers]
  <appointmentRequest>
     <patient id = "jsmith"/>
  </appointmentRequest>
• HTTP/1.1 200 OK [various headers]
  <appointment>
   <slot id = "1234" doctor = "mjones" start = "1400"
     end = "1450"/>
   <patient id = "jsmith"/>
  </appointment>
• The link at the moment should be like this
  – http://royalhope.nhs.uk/slots/1234/appointment
Level 2: HTTP Verbs
• GET/POST/PUT/DELETE
• Use GET
 /doctors/mjones/slots?date=20100104&status=open
  HTTP/1.1 Host: royalhope.nhs.uk
• HTTP/1.1 200 OK [various headers]
  <openSlotList>
     <slot id = "1234" doctor = "mjones" start = "1400"
            end = "1450"/>
     <slot id = "5678" doctor = "mjones" start = "1600"
            end = "1650"/>
  </openSlotList>
• POST /slots/1234 HTTP/1.1 [various other
  headers]
  <appointmentRequest>
     <patient id = "jsmith"/>
  </appointmentRequest>
• HTTP/1.1 201 Created Location:
  slots/1234/appointment [various headers]
  <appointment>
     <slot id = "1234" doctor = "mjones" start =
            "1400" end = "1450"/>
     <patient id = "jsmith"/>
  </appointment>
• If something wrong when we use POST to
  server, the result should be
  HTTP/1.1 409 Conflict [various headers]
  <openSlotList>
     <slot id = "5678" doctor = "mjones" start =
            "1600" end = "1650"/>
  </openSlotList>
• Benefits:
  – Caching on GET request (natural capability with
    HTTP protocol)
Level 3: Hypermedia Controls
• HATEOAS (Hypertext As The Engine Of
  Application State)
• GET
  /doctors/mjones/slots?date=20100104&status=o
  pen HTTP/1.1 Host: royalhope.nhs.uk
• HTTP/1.1 200 OK [various headers]
  <openSlotList>
     <slot id = "1234" doctor = "mjones" start = "1400"
             end = "1450">
      <link rel = "/linkrels/slot/book" uri =
             "/slots/1234"/>
     </slot>
     <slot id = "5678" doctor = "mjones" start = "1600"
             end = "1650">
      <link rel = "/linkrels/slot/book" uri =
             "/slots/5678"/>
     </slot>
  </openSlotList>
• POST /slots/1234 HTTP/1.1 [various other
  headers]
  <appointmentRequest>
     <patient id = "jsmith"/>
  </appointmentRequest>
• HTTP/1.1 201 Created Location:
   http://royalhope.nhs.uk/slots/1234/appointment [various headers]
  <appointment>
   <slot id = "1234" doctor = "mjones" start = "1400" end = "1450"/>
        <patient id = "jsmith"/>
        <link rel = "/linkrels/appointment/cancel" uri =
                  "/slots/1234/appointment"/>
        <link rel = "/linkrels/appointment/addTest" uri =
                  "/slots/1234/appointment/tests"/>
        <link rel = "self" uri = "/slots/1234/appointment"/>
        <link rel = "/linkrels/appointment/changeTime" uri =
"/doctors/mjones/slots?date=20100104@status=open"/>
        <link rel = "/linkrels/appointment/updateContactInfo" uri =
"/patients/jsmith/contactInfo"/>
        <link rel = "/linkrels/help" uri = "/help/appointment"/>
  </appointment>


• What’s benefit of those?
ASP.NET Web API
• What is the purpose of the WebAPIs?
• Why do we need REST HTTP services? What’s
  wrong with SOAP-over-HTTP?
• Why did the WebAPIs move from WCF to
  ASP.NET MVC?
• Is there still a use for WCF? When should I
  choose Web APIs over WCF?
Mapping from WCF to Web API
•   WCF Web AP -> ASP.NET Web API
•   Service -> Web API controller
•   Operation -> Action
•   Service contract -> Not applicable
•   Endpoint -> Not applicable
•   URI templates -> ASP.NET Routing
•   Message handlers -> Same
•   Formatters -> Same
•   Operation handlers -> Filters, model binders
Integrated stack supporting features
• Modern HTTP programming model
• Full support for ASP.NET Routing
• Content negotiation and custom formatters
• Model binding and validation
• Filters
• Query composition
• Easy to unit test
• Improved Inversion of Control (IoC) via
  DependencyResolver
• Code-based configuration
• Self-host
What we do in BC Survey project
•   Introduced Web API service
•   Web API routing and actions
•   Working with HTTP (Verb & return status)
•   Format & model binding
•   Dependency Resolver with Autofac
•   Web API clients
•   Host ASP.NET Web API on IIS
Web API service
public class SurveyAPIController : BaseApiController
{
  // GET api/Survey
  [Queryable]
  public IQueryable<SurveyDTO> Get()          {
    return _surveyAppService.GetAllSurvey().AsQueryable();
  }
  // GET api/Survey/5
  public SurveyDTO Get(int id) { … }
    // POST api/Survey
    public HttpResponseMessage Post(SurveyDTO value) { … }
    // PUT api/Survey/5
    public HttpResponseMessage Put(int id, SurveyDTO value) { … }
    // DELETE api/Survey/5
    public HttpResponseMessage Delete(int id) {… }
}
Web API service
• OData (Open data protocol): The Open Data
  Protocol is an open web protocol for querying
  and updating data. The protocol allows for a
  consumer to query a datasource over the
  HTTP protocol and get the result back in
  formats like Atom, JSON or plain XML,
  including pagination, ordering or filtering of
  the data.
Web API routing and actions
• routes.MapHttpRoute("DefaultApi",
      "api/{controller}/{id}", new { id =
      RouteParameter.Optional });
MapHttpRoute really different from default
routing in ASP.NET MVC
• routes.MapRoute("Default",
      "{controller}/{action}/{id}", new {
      controller = "Home", action = "Index", id =
      UrlParameter.Optional });
Working with HTTP (Verb & return
                status)
• It have 9 method definitions like
   –   GET
   –   HEAD
   –   POST
   –   PUT
   –   DELETE
   –   TRACE
   –   CONNECT
• We can reference more at
  http://www.w3.org/Protocols/rfc2616/rfc2616-
  sec9.html
Working with HTTP (Verb & return
                  status)
•   200 OK
•   201 Created
•   400 Bad Request
•   401 Unauthorized
•   404 Not Found
•   409 Conflict
•   500 Internal Server Error
•   501 Not Implemented
•   Reference more at
    http://en.wikipedia.org/wiki/List_of_HTTP_status_cod
    es
Format & model binding
• Media-Type Formatters
     // Remove the XML formatter
     config.Formatters.Remove(config.Formatters.XmlF
            ormatter);
     var json = config.Formatters.JsonFormatter;
     json.SerializerSettings.DateFormatHandling =
            DateFormatHandling.MicrosoftDateFormat;
     json.SerializerSettings.Formatting =
            Formatting.Indented;
• Content Negotiation
• Model Validation in ASP.NET Web API
Dependency Resolver with Autofac
var builder = new ContainerBuilder();
 // register autofac modules
builder.RegisterModule<WebModule>();
builder.RegisterModule<DataSurveyModule>();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterFilterProvider();

var container = builder.Build();
DependencyResolver.SetResolver(new
AutofacDependencyResolver(container));
Q&A
References
• http://www.ics.uci.edu/~fielding/pubs/dissert
  ation/top.htm
• http://www.crummy.com/writing/speaking/2
  008-QCon/act3.html
• http://martinfowler.com/articles/richardsonM
  aturityModel.html
• http://www.asp.net/web-api/

Mais conteúdo relacionado

Mais procurados

Modelo Orientado A Objetos
Modelo Orientado A ObjetosModelo Orientado A Objetos
Modelo Orientado A Objetosjose_rob
 
Clases de direcciones IP
Clases de direcciones IPClases de direcciones IP
Clases de direcciones IPf_lazarte
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAGabriel Suarez
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de javainnovalabcun
 
Manual de conexion a una base de datos con gambas
Manual de conexion a una base de datos con gambasManual de conexion a una base de datos con gambas
Manual de conexion a una base de datos con gambasMoposita1994
 
Fundamentos de redes: 6. Direccionamiento de la red ipv4
Fundamentos de redes: 6. Direccionamiento de la red ipv4Fundamentos de redes: 6. Direccionamiento de la red ipv4
Fundamentos de redes: 6. Direccionamiento de la red ipv4Francesc Perez
 
Arquitectura 3 Capas
Arquitectura 3 CapasArquitectura 3 Capas
Arquitectura 3 CapasFani Calle
 
Modelo Entidad Relación
Modelo Entidad RelaciónModelo Entidad Relación
Modelo Entidad RelaciónDamelys Bracho
 
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysqlROQUE Caldas Dominguez
 
Diagramas Analisis
Diagramas AnalisisDiagramas Analisis
Diagramas Analisisinnovalabcun
 
Introducción a la Capa de Red
Introducción a la Capa de RedIntroducción a la Capa de Red
Introducción a la Capa de RedJavier Peinado I
 
Programación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVAProgramación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVAMichelle Torres
 
Manejo de archivos en JAVA
Manejo de archivos en JAVAManejo de archivos en JAVA
Manejo de archivos en JAVAMichelle Torres
 

Mais procurados (20)

DIRECCIONAMIENTO IP BASICO I
DIRECCIONAMIENTO IP BASICO IDIRECCIONAMIENTO IP BASICO I
DIRECCIONAMIENTO IP BASICO I
 
Modelo Orientado A Objetos
Modelo Orientado A ObjetosModelo Orientado A Objetos
Modelo Orientado A Objetos
 
Clases de direcciones IP
Clases de direcciones IPClases de direcciones IP
Clases de direcciones IP
 
ENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVAENTRADA Y SALIDA DE DATOS EN JAVA
ENTRADA Y SALIDA DE DATOS EN JAVA
 
Clases y objetos de java
Clases y objetos de javaClases y objetos de java
Clases y objetos de java
 
Protocolos de red
Protocolos de redProtocolos de red
Protocolos de red
 
Manual de conexion a una base de datos con gambas
Manual de conexion a una base de datos con gambasManual de conexion a una base de datos con gambas
Manual de conexion a una base de datos con gambas
 
Rfc2460 es
Rfc2460 esRfc2460 es
Rfc2460 es
 
Fundamentos de redes: 6. Direccionamiento de la red ipv4
Fundamentos de redes: 6. Direccionamiento de la red ipv4Fundamentos de redes: 6. Direccionamiento de la red ipv4
Fundamentos de redes: 6. Direccionamiento de la red ipv4
 
Lenguaje SQL
Lenguaje SQLLenguaje SQL
Lenguaje SQL
 
Arquitectura 3 Capas
Arquitectura 3 CapasArquitectura 3 Capas
Arquitectura 3 Capas
 
Modelo Entidad Relación
Modelo Entidad RelaciónModelo Entidad Relación
Modelo Entidad Relación
 
Metodologiasad 1
Metodologiasad 1Metodologiasad 1
Metodologiasad 1
 
Procedimientos almacenados
Procedimientos almacenadosProcedimientos almacenados
Procedimientos almacenados
 
Conexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysqlConexión desde una aplicación en java a un bd en mysql
Conexión desde una aplicación en java a un bd en mysql
 
Diagramas Analisis
Diagramas AnalisisDiagramas Analisis
Diagramas Analisis
 
Sql
SqlSql
Sql
 
Introducción a la Capa de Red
Introducción a la Capa de RedIntroducción a la Capa de Red
Introducción a la Capa de Red
 
Programación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVAProgramación Orientada a Objetos en JAVA
Programación Orientada a Objetos en JAVA
 
Manejo de archivos en JAVA
Manejo de archivos en JAVAManejo de archivos en JAVA
Manejo de archivos en JAVA
 

Destaque

ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIhabib_786
 
C# ASP.NET WEB API APPLICATION DEVELOPMENT
C# ASP.NET WEB API APPLICATION DEVELOPMENTC# ASP.NET WEB API APPLICATION DEVELOPMENT
C# ASP.NET WEB API APPLICATION DEVELOPMENTDr. Awase Khirni Syed
 
ASP.NET Mvc 4 web api
ASP.NET Mvc 4 web apiASP.NET Mvc 4 web api
ASP.NET Mvc 4 web apiTiago Knoch
 
The ASP.NET Web API for Beginners
The ASP.NET Web API for BeginnersThe ASP.NET Web API for Beginners
The ASP.NET Web API for BeginnersKevin Hazzard
 
ASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP FundamentalsASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP FundamentalsIdo Flatow
 
Overview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB APIOverview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB APIPankaj Bajaj
 
Web API or WCF - An Architectural Comparison
Web API or WCF - An Architectural ComparisonWeb API or WCF - An Architectural Comparison
Web API or WCF - An Architectural ComparisonAdnan Masood
 
WCF tutorial
WCF tutorialWCF tutorial
WCF tutorialAbhi Arya
 
Introduction to the Web API
Introduction to the Web APIIntroduction to the Web API
Introduction to the Web APIBrad Genereaux
 
The Full Power of ASP.NET Web API
The Full Power of ASP.NET Web APIThe Full Power of ASP.NET Web API
The Full Power of ASP.NET Web APIEyal Vardi
 
RESTful API Design Best Practices Using ASP.NET Web API
RESTful API Design Best Practices Using ASP.NET Web APIRESTful API Design Best Practices Using ASP.NET Web API
RESTful API Design Best Practices Using ASP.NET Web API💻 Spencer Schneidenbach
 
Secure Coding for NodeJS
Secure Coding for NodeJSSecure Coding for NodeJS
Secure Coding for NodeJSThang Chung
 
Passport Nodejs Lightening Talk
Passport Nodejs Lightening TalkPassport Nodejs Lightening Talk
Passport Nodejs Lightening TalkKianosh Pourian
 
ASP.NET Core 1 for MVC- and WebAPI-Devs
ASP.NET Core 1 for MVC- and WebAPI-DevsASP.NET Core 1 for MVC- and WebAPI-Devs
ASP.NET Core 1 for MVC- and WebAPI-DevsManfred Steyer
 
ASP.NET - Architecting single page applications with knockout.js
ASP.NET - Architecting single page applications with knockout.jsASP.NET - Architecting single page applications with knockout.js
ASP.NET - Architecting single page applications with knockout.jsDimitar Danailov
 
Web Technologies
Web TechnologiesWeb Technologies
Web TechnologiesLior Zamir
 

Destaque (20)

ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
C# ASP.NET WEB API APPLICATION DEVELOPMENT
C# ASP.NET WEB API APPLICATION DEVELOPMENTC# ASP.NET WEB API APPLICATION DEVELOPMENT
C# ASP.NET WEB API APPLICATION DEVELOPMENT
 
ASP.NET Mvc 4 web api
ASP.NET Mvc 4 web apiASP.NET Mvc 4 web api
ASP.NET Mvc 4 web api
 
The ASP.NET Web API for Beginners
The ASP.NET Web API for BeginnersThe ASP.NET Web API for Beginners
The ASP.NET Web API for Beginners
 
ASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP FundamentalsASP.NET Web API and HTTP Fundamentals
ASP.NET Web API and HTTP Fundamentals
 
Overview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB APIOverview of Rest Service and ASP.NET WEB API
Overview of Rest Service and ASP.NET WEB API
 
Web API or WCF - An Architectural Comparison
Web API or WCF - An Architectural ComparisonWeb API or WCF - An Architectural Comparison
Web API or WCF - An Architectural Comparison
 
Excellent rest using asp.net web api
Excellent rest using asp.net web apiExcellent rest using asp.net web api
Excellent rest using asp.net web api
 
Web api
Web apiWeb api
Web api
 
WCF tutorial
WCF tutorialWCF tutorial
WCF tutorial
 
Introduction to the Web API
Introduction to the Web APIIntroduction to the Web API
Introduction to the Web API
 
The Full Power of ASP.NET Web API
The Full Power of ASP.NET Web APIThe Full Power of ASP.NET Web API
The Full Power of ASP.NET Web API
 
RESTful API Design Best Practices Using ASP.NET Web API
RESTful API Design Best Practices Using ASP.NET Web APIRESTful API Design Best Practices Using ASP.NET Web API
RESTful API Design Best Practices Using ASP.NET Web API
 
Introduction to asp.net web api
Introduction to asp.net web apiIntroduction to asp.net web api
Introduction to asp.net web api
 
Secure Coding for NodeJS
Secure Coding for NodeJSSecure Coding for NodeJS
Secure Coding for NodeJS
 
Passport Nodejs Lightening Talk
Passport Nodejs Lightening TalkPassport Nodejs Lightening Talk
Passport Nodejs Lightening Talk
 
ASP.NET Core 1 for MVC- and WebAPI-Devs
ASP.NET Core 1 for MVC- and WebAPI-DevsASP.NET Core 1 for MVC- and WebAPI-Devs
ASP.NET Core 1 for MVC- and WebAPI-Devs
 
Web 2.0 y nube de internet
Web 2.0 y nube de internetWeb 2.0 y nube de internet
Web 2.0 y nube de internet
 
ASP.NET - Architecting single page applications with knockout.js
ASP.NET - Architecting single page applications with knockout.jsASP.NET - Architecting single page applications with knockout.js
ASP.NET - Architecting single page applications with knockout.js
 
Web Technologies
Web TechnologiesWeb Technologies
Web Technologies
 

Semelhante a ASP.NET WEB API

Rest in practice
Rest in practiceRest in practice
Rest in practiceGabor Torok
 
REST and Web API
REST and Web APIREST and Web API
REST and Web APIIT Weekend
 
About REST. Архитектурные семинары Softengi
About REST. Архитектурные семинары SoftengiAbout REST. Архитектурные семинары Softengi
About REST. Архитектурные семинары SoftengiSoftengi
 
Webservices Overview : XML RPC, SOAP and REST
Webservices Overview : XML RPC, SOAP and RESTWebservices Overview : XML RPC, SOAP and REST
Webservices Overview : XML RPC, SOAP and RESTPradeep Kumar
 
Rest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.jsRest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.jsCarol McDonald
 
ERRest - Designing a good REST service
ERRest - Designing a good REST serviceERRest - Designing a good REST service
ERRest - Designing a good REST serviceWO Community
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API07.pallav
 
Android App Development 06 : Network &amp; Web Services
Android App Development 06 : Network &amp; Web ServicesAndroid App Development 06 : Network &amp; Web Services
Android App Development 06 : Network &amp; Web ServicesAnuchit Chalothorn
 
RESTful services
RESTful servicesRESTful services
RESTful servicesgouthamrv
 
Constraints Make You Sexy - What is Rest
Constraints Make You Sexy  - What is RestConstraints Make You Sexy  - What is Rest
Constraints Make You Sexy - What is Restanorqiu
 
A Quick Introduction to YQL
A Quick Introduction to YQLA Quick Introduction to YQL
A Quick Introduction to YQLMax Manders
 
Velocity EU 2014 — Offline-first web apps
Velocity EU 2014 — Offline-first web appsVelocity EU 2014 — Offline-first web apps
Velocity EU 2014 — Offline-first web appsandrewsmatt
 
Boost Your Content Strategy for REST APIs with Gururaj BS
Boost Your Content Strategy for REST APIs with Gururaj BSBoost Your Content Strategy for REST APIs with Gururaj BS
Boost Your Content Strategy for REST APIs with Gururaj BSInformation Development World
 
Introduction to rest using flask
Introduction to rest using flaskIntroduction to rest using flask
Introduction to rest using flaskWekanta
 
01. http basics v27
01. http basics v2701. http basics v27
01. http basics v27Eoin Keary
 
Java Servlets.pdf
Java Servlets.pdfJava Servlets.pdf
Java Servlets.pdfArumugam90
 

Semelhante a ASP.NET WEB API (20)

Rest in practice
Rest in practiceRest in practice
Rest in practice
 
REST and Web API
REST and Web APIREST and Web API
REST and Web API
 
REST and Web API
REST and Web APIREST and Web API
REST and Web API
 
About REST. Архитектурные семинары Softengi
About REST. Архитектурные семинары SoftengiAbout REST. Архитектурные семинары Softengi
About REST. Архитектурные семинары Softengi
 
Webservices Overview : XML RPC, SOAP and REST
Webservices Overview : XML RPC, SOAP and RESTWebservices Overview : XML RPC, SOAP and REST
Webservices Overview : XML RPC, SOAP and REST
 
Rest
RestRest
Rest
 
Rest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.jsRest with Java EE 6 , Security , Backbone.js
Rest with Java EE 6 , Security , Backbone.js
 
ERRest - Designing a good REST service
ERRest - Designing a good REST serviceERRest - Designing a good REST service
ERRest - Designing a good REST service
 
Spring Boot and REST API
Spring Boot and REST APISpring Boot and REST API
Spring Boot and REST API
 
Android App Development 06 : Network &amp; Web Services
Android App Development 06 : Network &amp; Web ServicesAndroid App Development 06 : Network &amp; Web Services
Android App Development 06 : Network &amp; Web Services
 
RESTful services
RESTful servicesRESTful services
RESTful services
 
Constraints Make You Sexy - What is Rest
Constraints Make You Sexy  - What is RestConstraints Make You Sexy  - What is Rest
Constraints Make You Sexy - What is Rest
 
Doing REST Right
Doing REST RightDoing REST Right
Doing REST Right
 
From unREST to REST
From unREST to RESTFrom unREST to REST
From unREST to REST
 
A Quick Introduction to YQL
A Quick Introduction to YQLA Quick Introduction to YQL
A Quick Introduction to YQL
 
Velocity EU 2014 — Offline-first web apps
Velocity EU 2014 — Offline-first web appsVelocity EU 2014 — Offline-first web apps
Velocity EU 2014 — Offline-first web apps
 
Boost Your Content Strategy for REST APIs with Gururaj BS
Boost Your Content Strategy for REST APIs with Gururaj BSBoost Your Content Strategy for REST APIs with Gururaj BS
Boost Your Content Strategy for REST APIs with Gururaj BS
 
Introduction to rest using flask
Introduction to rest using flaskIntroduction to rest using flask
Introduction to rest using flask
 
01. http basics v27
01. http basics v2701. http basics v27
01. http basics v27
 
Java Servlets.pdf
Java Servlets.pdfJava Servlets.pdf
Java Servlets.pdf
 

Último

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 

Último (20)

Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 

ASP.NET WEB API

  • 1. ASP.NET WEB API @thangchung 08-08-2012
  • 2. Agenda • A model of restful maturity • ASP.NET Web API • Mapping from WCF to Web API • Integrated stack supporting features • What we do in BC Survey project
  • 3. A model of restful maturity • Restful coined by Roy Thomas Fielding in his dissesertation (2000) • A model of restful maturity introduced by Leonard Richardson (2008) • The glory of REST by Martin Fowler (2010) • We have 4 levels of maturity – Level 0: The swamp of POX (Plain Old XML) – Level 1: Resources – Level 2: HTTP verbs – Level 3: Hypermedia Controls
  • 4.
  • 5. Level 0: The swamp of POX • Use RPC (Remote Procedure Invocation) • POST /appointmentService HTTP/1.1 [various other headers] <openSlotRequest date = "2010-01-04" doctor = "mjones"/>
  • 6. • The server return an open slot list as HTTP/1.1 200 OK [various headers] <openSlotList> <slot start = "1400" end = "1450"> <doctor id = “mjones”/> </slot> <slot start = "1600" end = "1650"> <doctor id = “mjones”/> </slot> </openSlotList> • We choose the the first item and send it to server: POST /appointmentService HTTP/1.1 [various other headers] <appointmentRequest> <slot doctor = "mjones" start = "1400" end = "1450"/> <patient id = "jsmith"/> </appointmentRequest>
  • 7. • The server accept this request and register name of patient HTTP/1.1 200 OK [various headers] <appointment> <slot doctor = "mjones" start = "1400" end = "1450"/> <patient id = "jsmith"/> </appointment> • If some thing wrong, the result should be HTTP/1.1 200 OK [various headers] <appointmentRequestFailure> <slot doctor = "mjones" start = "1400" end = "1450"/> <patient id = "jsmith"/> <reason>Slot not available</reason> </appointmentRequestFailure>
  • 9. • POST /doctors/mjones HTTP/1.1 [various other headers] <openSlotRequest date = "2010-01-04"/> • HTTP/1.1 200 OK [various headers] <openSlotList> <slot id = "1234" doctor = "mjones" start = "1400" end = "1450"/> <slot id = "5678" doctor = "mjones" start = "1600" end = "1650"/> </openSlotList>
  • 10. • POST /slots/1234 HTTP/1.1 [various other headers] <appointmentRequest> <patient id = "jsmith"/> </appointmentRequest> • HTTP/1.1 200 OK [various headers] <appointment> <slot id = "1234" doctor = "mjones" start = "1400" end = "1450"/> <patient id = "jsmith"/> </appointment> • The link at the moment should be like this – http://royalhope.nhs.uk/slots/1234/appointment
  • 11. Level 2: HTTP Verbs • GET/POST/PUT/DELETE
  • 12. • Use GET /doctors/mjones/slots?date=20100104&status=open HTTP/1.1 Host: royalhope.nhs.uk • HTTP/1.1 200 OK [various headers] <openSlotList> <slot id = "1234" doctor = "mjones" start = "1400" end = "1450"/> <slot id = "5678" doctor = "mjones" start = "1600" end = "1650"/> </openSlotList>
  • 13. • POST /slots/1234 HTTP/1.1 [various other headers] <appointmentRequest> <patient id = "jsmith"/> </appointmentRequest> • HTTP/1.1 201 Created Location: slots/1234/appointment [various headers] <appointment> <slot id = "1234" doctor = "mjones" start = "1400" end = "1450"/> <patient id = "jsmith"/> </appointment>
  • 14. • If something wrong when we use POST to server, the result should be HTTP/1.1 409 Conflict [various headers] <openSlotList> <slot id = "5678" doctor = "mjones" start = "1600" end = "1650"/> </openSlotList> • Benefits: – Caching on GET request (natural capability with HTTP protocol)
  • 15. Level 3: Hypermedia Controls • HATEOAS (Hypertext As The Engine Of Application State)
  • 16. • GET /doctors/mjones/slots?date=20100104&status=o pen HTTP/1.1 Host: royalhope.nhs.uk • HTTP/1.1 200 OK [various headers] <openSlotList> <slot id = "1234" doctor = "mjones" start = "1400" end = "1450"> <link rel = "/linkrels/slot/book" uri = "/slots/1234"/> </slot> <slot id = "5678" doctor = "mjones" start = "1600" end = "1650"> <link rel = "/linkrels/slot/book" uri = "/slots/5678"/> </slot> </openSlotList>
  • 17. • POST /slots/1234 HTTP/1.1 [various other headers] <appointmentRequest> <patient id = "jsmith"/> </appointmentRequest>
  • 18. • HTTP/1.1 201 Created Location: http://royalhope.nhs.uk/slots/1234/appointment [various headers] <appointment> <slot id = "1234" doctor = "mjones" start = "1400" end = "1450"/> <patient id = "jsmith"/> <link rel = "/linkrels/appointment/cancel" uri = "/slots/1234/appointment"/> <link rel = "/linkrels/appointment/addTest" uri = "/slots/1234/appointment/tests"/> <link rel = "self" uri = "/slots/1234/appointment"/> <link rel = "/linkrels/appointment/changeTime" uri = "/doctors/mjones/slots?date=20100104@status=open"/> <link rel = "/linkrels/appointment/updateContactInfo" uri = "/patients/jsmith/contactInfo"/> <link rel = "/linkrels/help" uri = "/help/appointment"/> </appointment> • What’s benefit of those?
  • 19. ASP.NET Web API • What is the purpose of the WebAPIs? • Why do we need REST HTTP services? What’s wrong with SOAP-over-HTTP? • Why did the WebAPIs move from WCF to ASP.NET MVC? • Is there still a use for WCF? When should I choose Web APIs over WCF?
  • 20. Mapping from WCF to Web API • WCF Web AP -> ASP.NET Web API • Service -> Web API controller • Operation -> Action • Service contract -> Not applicable • Endpoint -> Not applicable • URI templates -> ASP.NET Routing • Message handlers -> Same • Formatters -> Same • Operation handlers -> Filters, model binders
  • 21. Integrated stack supporting features • Modern HTTP programming model • Full support for ASP.NET Routing • Content negotiation and custom formatters • Model binding and validation • Filters • Query composition • Easy to unit test • Improved Inversion of Control (IoC) via DependencyResolver • Code-based configuration • Self-host
  • 22. What we do in BC Survey project • Introduced Web API service • Web API routing and actions • Working with HTTP (Verb & return status) • Format & model binding • Dependency Resolver with Autofac • Web API clients • Host ASP.NET Web API on IIS
  • 23. Web API service public class SurveyAPIController : BaseApiController { // GET api/Survey [Queryable] public IQueryable<SurveyDTO> Get() { return _surveyAppService.GetAllSurvey().AsQueryable(); } // GET api/Survey/5 public SurveyDTO Get(int id) { … } // POST api/Survey public HttpResponseMessage Post(SurveyDTO value) { … } // PUT api/Survey/5 public HttpResponseMessage Put(int id, SurveyDTO value) { … } // DELETE api/Survey/5 public HttpResponseMessage Delete(int id) {… } }
  • 24. Web API service • OData (Open data protocol): The Open Data Protocol is an open web protocol for querying and updating data. The protocol allows for a consumer to query a datasource over the HTTP protocol and get the result back in formats like Atom, JSON or plain XML, including pagination, ordering or filtering of the data.
  • 25. Web API routing and actions • routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", new { id = RouteParameter.Optional }); MapHttpRoute really different from default routing in ASP.NET MVC • routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
  • 26. Working with HTTP (Verb & return status) • It have 9 method definitions like – GET – HEAD – POST – PUT – DELETE – TRACE – CONNECT • We can reference more at http://www.w3.org/Protocols/rfc2616/rfc2616- sec9.html
  • 27. Working with HTTP (Verb & return status) • 200 OK • 201 Created • 400 Bad Request • 401 Unauthorized • 404 Not Found • 409 Conflict • 500 Internal Server Error • 501 Not Implemented • Reference more at http://en.wikipedia.org/wiki/List_of_HTTP_status_cod es
  • 28. Format & model binding • Media-Type Formatters // Remove the XML formatter config.Formatters.Remove(config.Formatters.XmlF ormatter); var json = config.Formatters.JsonFormatter; json.SerializerSettings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat; json.SerializerSettings.Formatting = Formatting.Indented; • Content Negotiation • Model Validation in ASP.NET Web API
  • 29. Dependency Resolver with Autofac var builder = new ContainerBuilder(); // register autofac modules builder.RegisterModule<WebModule>(); builder.RegisterModule<DataSurveyModule>(); builder.RegisterControllers(Assembly.GetExecutingAssembly()); builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); builder.RegisterFilterProvider(); var container = builder.Build(); DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
  • 30. Q&A
  • 31. References • http://www.ics.uci.edu/~fielding/pubs/dissert ation/top.htm • http://www.crummy.com/writing/speaking/2 008-QCon/act3.html • http://martinfowler.com/articles/richardsonM aturityModel.html • http://www.asp.net/web-api/