Restful services-slides

28

description

 

Transcript of Restful services-slides

Page 1: Restful services-slides
Page 2: Restful services-slides
Page 3: Restful services-slides
Page 4: Restful services-slides
Page 5: Restful services-slides
Page 6: Restful services-slides

getUser()addUser()removeUser()...getLocation()addLocation()...

User { }Location { }

<user>

<name>Jane User</name>

<gender>female</gender>

<location href="http://example.org/locations/us/ny/nyc"

>New York City, NY, US</location>

</user>

Page 7: Restful services-slides
Page 8: Restful services-slides
Page 9: Restful services-slides
Page 10: Restful services-slides
Page 11: Restful services-slides
Page 12: Restful services-slides
Page 13: Restful services-slides
Page 14: Restful services-slides
Page 15: Restful services-slides

...

ServiceHost host = new ServiceHost(typeof(EvalService),

new Uri("http://localhost:8080/evals"));

host.AddServiceEndpoint(typeof(IEvals),

new WebHttpBinding(), "");

host.Description.Endpoints[0].Behaviors.Add(

new WebHttpBehavior());

host.Open(); // service is up and running

Console.ReadLine(); // hold process open

...

Page 16: Restful services-slides

...

WebServiceHost host = new WebServiceHost(

typeof(EvalService),

new Uri("http://localhost:8080/evals"));

host.Open(); // service is up and running

Console.ReadLine(); // hold process open

...

Page 17: Restful services-slides

[ServiceContract]

public interface IEvalService

{

[WebGet(UriTemplate="evals?name={name}&score={score}")]

[OperationContract]

List<Eval> GetEvals(string name, int score);

...

Page 18: Restful services-slides

[ServiceContract]

public interface IEvals

{

[WebInvoke(UriTemplate ="/evals?name={name}",Method="PUT")]

[OperationContract]

void SubmitEval(string name, Eval eval /* body */);

...

Page 19: Restful services-slides

/services/evals?name={name}&detailed={detailed}

Page 20: Restful services-slides
Page 21: Restful services-slides
Page 22: Restful services-slides

[ServiceKnownType(typeof(Atom10FeedFormatter))]

[ServiceKnownType(typeof(Rss20FeedFormatter))]

[ServiceContract]

public interface IEvalService {

[WebGet(UriTemplate = "evalsfeed")]

[OperationContract]

SyndicationFeedFormatter GetEvalsFeed();

...

}

Page 23: Restful services-slides

public class EvalService : IEvalService {

public SyndicationFeedFormatter GetEvalsFeed() {

List<Eval> evals = this.GetEvals();

SyndicationFeed feed = CreateSyndicationFeed(evals);

// figure out what format the client wants

WebOperationContext ctx = WebOperationContext.Current;

string format =

ctx.IncomingRequest.UriTemplateMatch.QueryParameters["format"];

// return the right type of formatted feed

if (format != null && format.Equals("atom"))

return new Atom10FeedFormatter(feed);

else

return new Rss20FeedFormatter(feed);

}

...

Page 24: Restful services-slides

[ServiceContract]

public interface IEvals

{

[WebGet(UriTemplate = "/evals?name={nameFilter}",

ResponseFormat = WebMessageFormat.Json)]

[OperationContract]

List<Eval> GetCurrentEvals(string nameFilter);

...

Page 25: Restful services-slides

<%@ ServiceHost Language="C#" Service="EvalService" Factory=

"System.ServiceModel.Activation.WebScriptServiceHostFactory" %>

Page 26: Restful services-slides
Page 27: Restful services-slides
Page 28: Restful services-slides