Foreword |
|
xix | |
Preface |
|
xxiii | |
Acknowledgments |
|
xxiv | |
About the Authors |
|
xxxv | |
|
RESTful Systems: Back to the Future |
|
|
1 | (38) |
|
|
3 | (6) |
|
|
9 | (5) |
|
Rest---The RPC Web Service Alternative |
|
|
14 | (5) |
|
|
19 | (14) |
|
|
20 | (1) |
|
|
21 | (2) |
|
Addressability and the URI |
|
|
23 | (1) |
|
|
23 | (3) |
|
If You Give a Client a Cookie |
|
|
26 | (1) |
|
Representations of Resources |
|
|
27 | (4) |
|
|
31 | (2) |
|
Net Tools for Building RESTful Services |
|
|
33 | (3) |
|
http.sys and Internet Information Services (IIS) |
|
|
34 | (2) |
|
Windows Communication Foundation |
|
|
36 | (1) |
|
|
36 | (3) |
|
The HyperText Transfer Protocol and the Universal Resource Identifier |
|
|
39 | (48) |
|
|
40 | (19) |
|
|
42 | (1) |
|
|
42 | (2) |
|
|
44 | (1) |
|
|
45 | (1) |
|
|
45 | (1) |
|
|
46 | (3) |
|
|
49 | (1) |
|
|
50 | (9) |
|
HTTP and Rest Anti-Patterns |
|
|
59 | (5) |
|
|
59 | (1) |
|
|
60 | (1) |
|
|
60 | (1) |
|
|
61 | (1) |
|
|
62 | (1) |
|
|
62 | (1) |
|
Lack of Hypermedia Support |
|
|
63 | (1) |
|
|
64 | (1) |
|
Uniform Resource Identifier 101 |
|
|
64 | (16) |
|
Addressability and the URI Revisited |
|
|
65 | (3) |
|
The Power Behind the Concept |
|
|
68 | (3) |
|
.Net Tools of the Trade---UriTemplate, UriTemplateMatch, UriTemplateTable, and UriBuilder |
|
|
71 | (9) |
|
|
80 | (5) |
|
The HttpExerciser Sample Application |
|
|
82 | (3) |
|
|
85 | (2) |
|
Desktop Client Operations |
|
|
87 | (38) |
|
We Still Write Desktop Applications |
|
|
87 | (1) |
|
An Introduction to our Web Service |
|
|
88 | (2) |
|
|
90 | (19) |
|
|
93 | (6) |
|
|
99 | (3) |
|
|
102 | (4) |
|
|
106 | (3) |
|
|
109 | (13) |
|
Working with Windows Presentation Foundation |
|
|
122 | (2) |
|
|
124 | (1) |
|
|
125 | (40) |
|
So You Want to Write a Web Client |
|
|
125 | (3) |
|
Working at the Metal: XMLHttpRequest |
|
|
128 | (14) |
|
Security with XMLHttpRequest |
|
|
141 | (1) |
|
Moving Up a Level: WCF Provided JavaScript/AJAX |
|
|
142 | (6) |
|
Programming the Web in C#: Silverlight 2.0 |
|
|
148 | (15) |
|
|
163 | (2) |
|
IIS and ASP.NET Internals and Instrumentation |
|
|
165 | (40) |
|
|
165 | (2) |
|
|
167 | (3) |
|
|
170 | (1) |
|
|
170 | (20) |
|
|
171 | (19) |
|
|
190 | (9) |
|
|
190 | (2) |
|
|
192 | (1) |
|
|
193 | (2) |
|
|
195 | (4) |
|
|
199 | (3) |
|
|
202 | (1) |
|
|
203 | (2) |
|
Building Rest Services Using IIS and ASP.NET |
|
|
205 | (40) |
|
|
205 | (5) |
|
Building a RESTful HttpHandler |
|
|
210 | (19) |
|
Designing the Blog Service |
|
|
211 | (3) |
|
|
214 | (2) |
|
|
216 | (12) |
|
|
228 | (1) |
|
|
229 | (2) |
|
|
231 | (11) |
|
ASP.NET Security Internals |
|
|
232 | (10) |
|
|
242 | (3) |
|
Building Rest Services Using ASP.NET MVC Framework |
|
|
245 | (36) |
|
The ASP.NET MVC Framework |
|
|
245 | (13) |
|
|
249 | (2) |
|
|
251 | (1) |
|
|
252 | (3) |
|
|
255 | (1) |
|
|
256 | (1) |
|
|
256 | (2) |
|
Building an MVC RESTful Service---CodeXRC |
|
|
258 | (20) |
|
|
260 | (1) |
|
|
261 | (3) |
|
|
264 | (12) |
|
The CodeXRC Service Client |
|
|
276 | (2) |
|
|
278 | (3) |
|
Building Rest Services Using WCF |
|
|
281 | (58) |
|
WCF: The Swiss Army Knife of Messaging |
|
|
281 | (1) |
|
|
282 | (5) |
|
|
284 | (3) |
|
|
287 | (14) |
|
Putting Together a WCF REST Stack |
|
|
288 | (5) |
|
Emitting a JavaScript File |
|
|
293 | (2) |
|
Integrating with ASP.NET and ASP.NET Security |
|
|
295 | (3) |
|
|
298 | (3) |
|
Feeding on WCF: Atom, AtomPub, and RSS Support |
|
|
301 | (9) |
|
|
310 | (15) |
|
|
311 | (4) |
|
|
315 | (1) |
|
|
316 | (9) |
|
|
325 | (11) |
|
|
325 | (3) |
|
|
328 | (1) |
|
Windows Management Instrumentation |
|
|
328 | (2) |
|
|
330 | (4) |
|
|
334 | (2) |
|
|
336 | (3) |
|
Building Rest Services Using Azure and .NET Services |
|
|
339 | (42) |
|
|
339 | (12) |
|
The Need for .NET Services |
|
|
342 | (2) |
|
The Many Faces of .NET Services |
|
|
344 | (3) |
|
The .NET Services Programming Model |
|
|
347 | (4) |
|
Introducing the Azure Comments Service |
|
|
351 | (12) |
|
|
352 | (7) |
|
|
359 | (2) |
|
|
361 | (2) |
|
|
363 | (14) |
|
|
363 | (4) |
|
Application-Based Clients |
|
|
367 | (10) |
|
Azure RESTful Account Management |
|
|
377 | (1) |
|
|
377 | (1) |
|
Working with Azure Access Control Manager |
|
|
378 | (1) |
|
|
378 | (3) |
|
.NET REST Architectural Considerations and Decisions |
|
|
381 | (8) |
|
|
389 | (18) |
|
|
390 | (1) |
|
|
391 | (1) |
|
Continue, HttpStatusCode.Continue |
|
|
391 | (1) |
|
Switching Protocols, HttpStatusCode.Switching Protocols |
|
|
392 | (1) |
|
|
392 | (1) |
|
|
392 | (1) |
|
Created, HttpStatusCode.Created |
|
|
392 | (1) |
|
Accepted, HttpStatusCode.Accepted |
|
|
392 | (1) |
|
Non-authoritative Information, HttpStatusCode.NonAuthoritativeInformation |
|
|
392 | (1) |
|
No content, HttpStatusCode.NoContent |
|
|
393 | (1) |
|
Reset content, HttpStatusCode.ResetContent |
|
|
393 | (1) |
|
Partial content, HttpStatusCode.PartialContent |
|
|
393 | (1) |
|
|
393 | (3) |
|
Multiple choices, HttpStatusCode.MultipleChoices/HttpStatusCode.Ambiguous |
|
|
393 | (1) |
|
Moved permanently, HttpStatusCode.MovedPermanently/HttpStatusCode.Moved |
|
|
394 | (1) |
|
Found, HttpStatusCode.Found/HttpStatusCode.Redirect |
|
|
394 | (1) |
|
See other, HttpStatusCode. SeeOther/HttpStatusCode.RedirectMethod |
|
|
394 | (1) |
|
Not modified, HttpStatusCode.NotModified |
|
|
395 | (1) |
|
Use proxy, HttpStatusCode.UseProxy |
|
|
395 | (1) |
|
Unused, HttpStatusCode.Unused |
|
|
395 | (1) |
|
Temporary redirect, HttpStatusCode.TemporaryRedirect/HttpStatusCode.RedirectKeepVerb |
|
|
395 | (1) |
|
|
396 | (7) |
|
Bad request, HttpStatusCode.BadRequest |
|
|
396 | (1) |
|
Unauthorized, HttpStatusCode.Unauthorized |
|
|
396 | (1) |
|
Payment required, HttpStatusCode.PaymentRequired |
|
|
397 | (1) |
|
Forbidden, HttpStatusCode.Forbidden |
|
|
397 | (1) |
|
Not found, HttpStatusCode.NotFound |
|
|
398 | (2) |
|
Method not allowed, HttpStatusCode.MethodNotAllowed |
|
|
400 | (1) |
|
Not acceptable, HttpStatusCode.NotAcceptable |
|
|
400 | (1) |
|
Proxy authentication required, HttpStatusCode.ProxyAuthenticationRequired |
|
|
400 | (1) |
|
Request timeout, HttpStatusCode.RequestTimeout |
|
|
401 | (1) |
|
Conflict, HttpStatusCode.Conflict |
|
|
401 | (1) |
|
Gone, HttpStatusCode.Gone |
|
|
401 | (1) |
|
Length required, HttpStatusCode.LengthRequired |
|
|
401 | (1) |
|
Precondition failed, HttpStatusCode.PreconditionFailed |
|
|
402 | (1) |
|
Request entity too large, HttpStatusCode.RequestEntityTooLarge |
|
|
402 | (1) |
|
Request URI too long, HttpStatusCode.RequestUriTooLong |
|
|
402 | (1) |
|
Unsupported media type, HttpStatusCode.UnsupportedMediaType |
|
|
403 | (1) |
|
Requested range not satisfiable, HttpStatusCode.RequestedRangeNotSatisfiable |
|
|
403 | (1) |
|
Expectation failed, HttpStatusCode.ExpectationFailed |
|
|
403 | (1) |
|
|
403 | (4) |
|
Internal server error, HttpStatusCode.InternalServerError |
|
|
404 | (1) |
|
Not implemented, HttpStatusCode.NotImplemented |
|
|
404 | (1) |
|
Bad gateway, HttpStatusCode.BadGateway |
|
|
405 | (1) |
|
Service unavailable, HttpStatusCode.ServiceUnavailable |
|
|
405 | (1) |
|
Gateway timeout, HttpStatusCode.GatewayTimeout |
|
|
406 | (1) |
|
Http version not supported, HttpStatusCode.HttpVersionNotSupported |
|
|
406 | (1) |
|
|
407 | (6) |
Index |
|
413 | |