103 Commits

Author SHA1 Message Date
b9dc2eaf8d Added Sascha Preibisch YouTube channel to resources 2021-01-05 10:04:07 -07:00
8d0d964c8e Added ads.txt 2019-07-26 09:09:24 -06:00
0f82bfa256 Merge pull request #49 from jvitoroc/patch-1
GET Method modified
2019-07-25 14:20:58 -06:00
acd11d7c41 Changed all (appropriate) links to https as certificate is now in play. 2018-07-03 16:21:23 -06:00
897540ed38 Adjusted restapiwebinar.html to be consistent with other pages, internally. 2018-06-10 12:37:24 -06:00
12d1c11994 Change per webinar questionnaire. 2018-06-10 12:20:29 -06:00
69d51664ab Altered sitemap, renaming to 'Tutorials' 2018-06-10 11:47:04 -06:00
1fa588ce40 Added call to action in hero box. 2018-02-19 19:31:17 -07:00
01a12feeba Revamped opt-in form. 2018-02-19 19:30:58 -07:00
7b7cff1c94 Added FB Pixel code to remaining pages. 2017-12-30 20:59:20 -07:00
a1cba0693e Merge branch 'master' into webinar-opt-in 2017-12-30 20:55:37 -07:00
0f3ef6a83b Rewording edits on opt-in copy. 2017-12-30 20:55:29 -07:00
e0e71b551c Added FB pixel. 2017-12-30 20:34:43 -07:00
e1f9d28368 pre-lim webinar opt-in content 2017-12-30 20:05:03 -07:00
1db5a21da4 Updated sitemap timestamps 2017-12-29 08:51:36 -07:00
af95f23004 GET Method modified 2017-12-06 23:30:09 -02:00
062a6f2487 Merge pull request #46 from ashwinkumar01/patch-1
Updating link to Twitter API
2017-11-02 15:50:37 -06:00
424ac0bd9f Merge branch 'master' into patch-1 2017-11-02 15:50:27 -06:00
74c75058e1 Merge branch 'master' into patch-1 2017-11-02 15:47:09 -06:00
7f80a401eb Merge pull request #45 from daftano/master
Specify licence and other small fixes
2017-11-02 15:45:48 -06:00
f8e8d78f98 Merge pull request #44 from mwalter/mwalter/fixBrokenLink
fix broken link to Twitter REST API documentation
2017-11-02 15:45:00 -06:00
915a3b9e98 Merge pull request #43 from arehman199/patch-1
restquicktips.html: fix a typo
2017-11-02 15:43:50 -06:00
a2fef915e3 Updating link to Twitter API
Link to Twitter API was broken, put in the correct link
2017-10-08 17:02:21 +02:00
78e451e720 fix typo
in "if the resource identifier is know before-hand."
it should be "known", and not "know".
2017-09-20 11:20:19 +00:00
da3518b25a update Twitter API documentation
to fix the broken link
2017-09-20 11:20:19 +00:00
9a9af89f8a specify the license
footer specify that the content is licenced under CC BY-SA 4.0 but
 that information isn't immediately available looking at the repository.

Add LICENSE and update the README.md adding the information from
 the footer.
2017-09-20 11:16:54 +00:00
200081c87d Updated sitemap.xml with new timestamp. 2017-09-12 21:37:04 -03:00
f6a197a9b1 fix broken link to Twitter REST API documentation 2017-08-24 17:55:22 +02:00
50fccc7668 restquicktips.html: fix a typo
..is know before-hand -> ..is known before-hand

Signed-off-by: Abdur Rehman <abdur_rehman@mentor.com>
2017-07-10 18:01:08 +05:00
f8ccf55972 Added leaderboard ad section on index.html 2017-06-19 18:00:41 -06:00
5c0869c10e Updated sitemap.xml to correspond to pull request changes. 2017-05-12 14:29:25 -06:00
62057e2d07 Merge pull request #40 from AndrewKindleysides/patch-1
Update httpstatuscodes.html
2017-05-11 14:27:25 -06:00
e5d2a99e9b Merge pull request #42 from mfulton26/master
HTTP Methods: Use 405 when appropriate
2017-05-11 14:26:02 -06:00
8d2ba39827 HTTP Methods: Use 405 when appropriate
Use 405 (Method Not Allowed) instead of 404 (Not Found) when a
resource exists at the given locator but does not support the specified
method (e.g. PUT, PATCH, DELETE on a collection).
2017-05-07 06:55:26 -05:00
8cfd28d3b8 Update httpstatuscodes.html 2017-01-30 11:21:05 +00:00
4cd60b5dd7 Merge pull request #38 from OlivierJaquemet/patch-1
Fix typo for status code 308 : s/experiemental/experimental/
2016-05-23 11:18:48 -06:00
c5684fa7db Fix typo for status code 308 : s/experiemental/experimental/ 2016-05-23 12:08:50 +02:00
418d535a45 Updated CDN per issue #36 2016-02-14 12:48:12 -07:00
83891a0807 Merge pull request #35 from kwaping/http_451
Added HTTP 451 status code
2016-02-11 15:53:47 -07:00
636881f082 Merge pull request #32 from Textalk/add-patch
Adding description of PATCH.
2016-02-11 15:52:58 -07:00
dabd60b7b6 Merge pull request #33 from flyingfisch/master
Improved wording, fixed some grammar/spelling
2016-02-11 15:52:21 -07:00
a662dcca45 Merge pull request #27 from blowsie/patch-2
Fixed the wrong tab being active by default
2016-02-11 15:49:53 -07:00
b38a79fc55 Added HTTP 451 status code 2016-01-12 13:42:16 -08:00
0e5b67c2eb Added Cheat Sheets section to Resources page. 2015-10-20 20:20:31 -06:00
a61020bc97 Improved wording on quick tips page 2015-10-03 23:22:14 -04:00
816397fcd7 Fixed grammar and spelling on index page 2015-10-03 23:12:32 -04:00
05e5111325 Adding description of PATCH. 2015-09-21 13:03:32 +02:00
18cd901d96 Changed lastmod date for all files. 2015-08-31 23:42:22 -06:00
af7b3a72e1 Added Google AdSense. 2015-08-31 23:41:58 -06:00
1a3933cd80 Fixed issue with post & get tabs. Added Google AdSense. 2015-08-31 23:41:24 -06:00
e7b96001dc Fixed the wrong tab being active by default
Revised version of another PR , see https://github.com/tfredrich/RestApiTutorial.com/pull/26
2015-06-08 11:54:21 +01:00
ba7ead6b7e Updated site map with latest timestamps for pull request merges. 2015-05-29 14:35:31 -06:00
fe8a646b63 Altered wording for 200 HTTP Response Code. 2015-05-29 13:58:33 -06:00
af1cc05b30 Merge pull request #24 from flyingfisch/master
Fixed grammar in "REST Quick Tips"
2015-05-29 13:56:35 -06:00
7520afd0ca Merge branch 'master' of https://github.com/juliomatcom/RestApiTutorial.com into juliomatcom-master
# Conflicts:
#	index.html
2015-05-29 13:48:48 -06:00
ad5a071cb5 Merge pull request #22 from juliomatcom/patch-1
Upd  in footer a tag
2015-05-29 13:40:20 -06:00
fda1204d7e fixed grammar in restquicktips.html 2015-05-06 16:04:37 -04:00
e2efaed4b8 fixed grammar in restquicktips.html 2015-05-06 10:57:47 -04:00
9177aead7b Added name to index.html and updated sitemap. 2015-05-04 20:21:25 -06:00
3b2db68e89 fix missing http:// protocol for href in footers 2015-04-15 10:23:59 +02:00
e4aa453faa Update httpmethods.html 2015-04-15 10:15:24 +02:00
cd615511b9 Update index.htm
Fix the missing http:// in the href in the license footer
2015-04-15 10:13:33 +02:00
6945ce7558 Merge branch 'master' of github.com:tfredrich/RestApiTutorial.com 2015-04-07 16:24:24 -06:00
8276bfd5db Added alternate banner. 2015-04-07 16:24:17 -06:00
b181e6d397 Merge pull request #20 from MatthewReinbold/patch-1
Update index.html
2015-03-31 14:57:17 -06:00
0dc68d52b9 Update index.html
Changed "tutorial" to "notes" to match a newsletter naming tweak.
2015-03-31 14:42:02 -06:00
816cd178b2 Removed banner ad. Merged tiny letter signup box from Matthew Reinbold. Added link to Russian translation on Resources page. 2015-03-31 14:02:31 -06:00
8d78f05708 Merge pull request #18 from supermitsuba/master
Fixed capitialization of RESTFul
2015-03-31 13:55:55 -06:00
d2a7f384e3 Fixed capitialization of RESTFul to RESTful, to match other instances of RESTful. 2015-02-19 15:38:19 -05:00
9e04cb8eda Merge pull request #17 from MatthewReinbold/master
banner modifications to remove the image and replace with search engine ...
2015-02-17 09:34:21 -07:00
dab538dbb1 Merge pull request #16 from blowsie/patch-1
Added in CRUD terminology
2015-02-17 09:33:52 -07:00
b172656254 Merge pull request #15 from mrkiffie/master
Adding "formats"
2015-02-17 09:30:46 -07:00
da3e07ad88 banner modifications to remove the image and replace with search engine friendly text, along with adding the newsletter signup 2015-02-12 11:03:03 -07:00
e621ad70e5 Added in CRUD terminology
> I couldnt' not find any contributing guidelines, so I hope this commit is welcome, even if it is just for discussion.
2015-02-09 10:59:00 +00:00
eadbe7ac73 Updated dates on sitemap 2015-02-08 20:15:18 -07:00
519accfb0c Updated banner link to rel=nofollow. 2015-02-08 20:13:58 -07:00
42ce0d4ab0 Added MailChimp opt-in. 2015-02-08 20:11:05 -07:00
e50ab4f523 Added sample OoO drawing banner. 2015-02-08 19:02:09 -07:00
a78b7317ed Added a sidebar. 2015-02-08 19:01:03 -07:00
b75fde2d35 Merge branch 'master' of github.com:tfredrich/RestApiTutorial.com 2015-02-08 19:00:43 -07:00
e756646b70 Merge branch 'master' of github.com:tfredrich/RestApiTutorial.com 2015-02-08 18:58:04 -07:00
b49225213c Added a bannder and sample page. 2015-02-08 18:57:38 -07:00
fb896005bd Updated POST error column to include 409. Changed idempotence section re. DELETE. 2015-02-08 11:30:59 -07:00
6fc44055c2 Merge branch 'master' of github.com:tfredrich/RestApiTutorial.com
Conflicts:
	sitemap.xml
2015-01-12 12:52:23 -07:00
55793ec003 Updated restquicktips.html lastmod. 2015-01-12 12:50:26 -07:00
9e6855a68f Adding "formats"
I think adding "formats" after "between" makes it clearer what the switching will be between. Although there is enough context to understand it implicitly, I prefer the explicit version. I think it also makes the sentence slightly easier to read.
2014-12-23 10:18:04 +02:00
7e8a9aa32f Updated modified date for lessons/restquicktips.html 2014-11-25 22:27:43 -07:00
c14959d767 Updated site map for latest updates. 2014-11-17 17:06:06 -07:00
2a5906fd38 Intermediate check-in of BP Guide v2.0 2014-11-17 16:59:45 -07:00
df0db45e69 Merge pull request #13 from cdownard/master
Fixed typo in verbiage and altered sentence to increase clarity of idea.
2014-11-17 16:54:36 -07:00
c499e5f002 Merge pull request #12 from yevhenpavliuk/patch-1
Replace UPDATE with PUT in the quick tips
2014-11-17 16:53:48 -07:00
ac19529169 Fixed typo in verbiage and altered sentence to increase clarity of idea. 2014-11-11 13:09:40 -07:00
535b659280 Replace UPDATE with PUT in the quick tips
I suppose you meant PUT there.
2014-11-02 13:49:32 +02:00
ef377daffe Updated license to Creative Commons 4.0 2014-05-29 13:37:30 -06:00
3acaef38d5 Removed .project file 2014-05-29 13:15:59 -06:00
a901182775 Updated GitHub.com ribbon graphics 2014-05-29 13:13:59 -06:00
856010a7e6 Merge branch 'master' of github.com:pnsantos/RestApiTutorial.com into pull-requests
Conflicts:
	httpstatuscodes.html
2014-05-29 12:42:49 -06:00
0ea4fb0326 Merge branch 'master' of github.com:nobozo/RestApiTutorial.com into pull-requests 2014-05-29 12:37:22 -06:00
7d2f2ddd43 Fixed collapse toggler in httpstatuscodes #7 2014-05-29 12:36:12 -06:00
4cdbd9ff80 Merge branch 'master' of github.com:sadleb/RestApiTutorial.com into pull-requests 2014-05-29 12:23:54 -06:00
2a4ad39911 Updated RFC 6585 status codes
428, 429, 431 and 511 are no longer drafts, they're published in RFC 6585
Also updated wikipedia references to reflect their change of status from draft to RFC
2014-02-13 11:38:00 +00:00
c0e566ec89 First pass at a copy edit. No technical changes. 2014-01-10 12:15:27 -08:00
c45c3d5a07 Removing safety section from idempotency topic. Was duplicate text. 2013-11-05 00:49:17 -05:00
24 changed files with 1215 additions and 321 deletions

View File

@ -7,3 +7,4 @@ RewriteRule ^(.*)$ http://www.restapitutorial.com/$1 [r=301,nc]
//301 Redirect Old File //301 Redirect Old File
Redirect 301 http://www.restapitutorial.com/restquicktips.html http://www.restapitutorial.com/lessons/restquicktips.html Redirect 301 http://www.restapitutorial.com/restquicktips.html http://www.restapitutorial.com/lessons/restquicktips.html
Redirect 301 http://www.restapitutorial.com/httpmethods.html http://www.restapitutorial.com/lessons/httpmethods.html Redirect 301 http://www.restapitutorial.com/httpmethods.html http://www.restapitutorial.com/lessons/httpmethods.html
Redirect 301 http://www.restapitutorial.com/apiconsulting.html http://www.restapitutorial.com/restapiwebinar.html

View File

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>RestApiTutorial</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>com.aptana.ide.core.unifiedBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>com.aptana.projects.webnature</nature>
</natures>
</projectDescription>

428
LICENSE Normal file
View File

@ -0,0 +1,428 @@
Attribution-ShareAlike 4.0 International
=======================================================================
Creative Commons Corporation ("Creative Commons") is not a law firm and
does not provide legal services or legal advice. Distribution of
Creative Commons public licenses does not create a lawyer-client or
other relationship. Creative Commons makes its licenses and related
information available on an "as-is" basis. Creative Commons gives no
warranties regarding its licenses, any material licensed under their
terms and conditions, or any related information. Creative Commons
disclaims all liability for damages resulting from their use to the
fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and
conditions that creators and other rights holders may use to share
original works of authorship and other material subject to copyright
and certain other rights specified in the public license below. The
following considerations are for informational purposes only, are not
exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are
intended for use by those authorized to give the public
permission to use material in ways otherwise restricted by
copyright and certain other rights. Our licenses are
irrevocable. Licensors should read and understand the terms
and conditions of the license they choose before applying it.
Licensors should also secure all rights necessary before
applying our licenses so that the public can reuse the
material as expected. Licensors should clearly mark any
material not subject to the license. This includes other CC-
licensed material, or material used under an exception or
limitation to copyright. More considerations for licensors:
wiki.creativecommons.org/Considerations_for_licensors
Considerations for the public: By using one of our public
licenses, a licensor grants the public permission to use the
licensed material under specified terms and conditions. If
the licensor's permission is not necessary for any reason--for
example, because of any applicable exception or limitation to
copyright--then that use is not regulated by the license. Our
licenses grant only permissions under copyright and certain
other rights that a licensor has authority to grant. Use of
the licensed material may still be restricted for other
reasons, including because others have copyright or other
rights in the material. A licensor may make special requests,
such as asking that all changes be marked or described.
Although not required by our licenses, you are encouraged to
respect those requests where reasonable. More_considerations
for the public:
wiki.creativecommons.org/Considerations_for_licensees
=======================================================================
Creative Commons Attribution-ShareAlike 4.0 International Public
License
By exercising the Licensed Rights (defined below), You accept and agree
to be bound by the terms and conditions of this Creative Commons
Attribution-ShareAlike 4.0 International Public License ("Public
License"). To the extent this Public License may be interpreted as a
contract, You are granted the Licensed Rights in consideration of Your
acceptance of these terms and conditions, and the Licensor grants You
such rights in consideration of benefits the Licensor receives from
making the Licensed Material available under these terms and
conditions.
Section 1 -- Definitions.
a. Adapted Material means material subject to Copyright and Similar
Rights that is derived from or based upon the Licensed Material
and in which the Licensed Material is translated, altered,
arranged, transformed, or otherwise modified in a manner requiring
permission under the Copyright and Similar Rights held by the
Licensor. For purposes of this Public License, where the Licensed
Material is a musical work, performance, or sound recording,
Adapted Material is always produced where the Licensed Material is
synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright
and Similar Rights in Your contributions to Adapted Material in
accordance with the terms and conditions of this Public License.
c. BY-SA Compatible License means a license listed at
creativecommons.org/compatiblelicenses, approved by Creative
Commons as essentially the equivalent of this Public License.
d. Copyright and Similar Rights means copyright and/or similar rights
closely related to copyright including, without limitation,
performance, broadcast, sound recording, and Sui Generis Database
Rights, without regard to how the rights are labeled or
categorized. For purposes of this Public License, the rights
specified in Section 2(b)(1)-(2) are not Copyright and Similar
Rights.
e. Effective Technological Measures means those measures that, in the
absence of proper authority, may not be circumvented under laws
fulfilling obligations under Article 11 of the WIPO Copyright
Treaty adopted on December 20, 1996, and/or similar international
agreements.
f. Exceptions and Limitations means fair use, fair dealing, and/or
any other exception or limitation to Copyright and Similar Rights
that applies to Your use of the Licensed Material.
g. License Elements means the license attributes listed in the name
of a Creative Commons Public License. The License Elements of this
Public License are Attribution and ShareAlike.
h. Licensed Material means the artistic or literary work, database,
or other material to which the Licensor applied this Public
License.
i. Licensed Rights means the rights granted to You subject to the
terms and conditions of this Public License, which are limited to
all Copyright and Similar Rights that apply to Your use of the
Licensed Material and that the Licensor has authority to license.
j. Licensor means the individual(s) or entity(ies) granting rights
under this Public License.
k. Share means to provide material to the public by any means or
process that requires permission under the Licensed Rights, such
as reproduction, public display, public performance, distribution,
dissemination, communication, or importation, and to make material
available to the public including in ways that members of the
public may access the material from a place and at a time
individually chosen by them.
l. Sui Generis Database Rights means rights other than copyright
resulting from Directive 96/9/EC of the European Parliament and of
the Council of 11 March 1996 on the legal protection of databases,
as amended and/or succeeded, as well as other essentially
equivalent rights anywhere in the world.
m. You means the individual or entity exercising the Licensed Rights
under this Public License. Your has a corresponding meaning.
Section 2 -- Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License,
the Licensor hereby grants You a worldwide, royalty-free,
non-sublicensable, non-exclusive, irrevocable license to
exercise the Licensed Rights in the Licensed Material to:
a. reproduce and Share the Licensed Material, in whole or
in part; and
b. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where
Exceptions and Limitations apply to Your use, this Public
License does not apply, and You do not need to comply with
its terms and conditions.
3. Term. The term of this Public License is specified in Section
6(a).
4. Media and formats; technical modifications allowed. The
Licensor authorizes You to exercise the Licensed Rights in
all media and formats whether now known or hereafter created,
and to make technical modifications necessary to do so. The
Licensor waives and/or agrees not to assert any right or
authority to forbid You from making technical modifications
necessary to exercise the Licensed Rights, including
technical modifications necessary to circumvent Effective
Technological Measures. For purposes of this Public License,
simply making modifications authorized by this Section 2(a)
(4) never produces Adapted Material.
5. Downstream recipients.
a. Offer from the Licensor -- Licensed Material. Every
recipient of the Licensed Material automatically
receives an offer from the Licensor to exercise the
Licensed Rights under the terms and conditions of this
Public License.
b. Additional offer from the Licensor -- Adapted Material.
Every recipient of Adapted Material from You
automatically receives an offer from the Licensor to
exercise the Licensed Rights in the Adapted Material
under the conditions of the Adapter's License You apply.
c. No downstream restrictions. You may not offer or impose
any additional or different terms or conditions on, or
apply any Effective Technological Measures to, the
Licensed Material if doing so restricts exercise of the
Licensed Rights by any recipient of the Licensed
Material.
6. No endorsement. Nothing in this Public License constitutes or
may be construed as permission to assert or imply that You
are, or that Your use of the Licensed Material is, connected
with, or sponsored, endorsed, or granted official status by,
the Licensor or others designated to receive attribution as
provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not
licensed under this Public License, nor are publicity,
privacy, and/or other similar personality rights; however, to
the extent possible, the Licensor waives and/or agrees not to
assert any such rights held by the Licensor to the limited
extent necessary to allow You to exercise the Licensed
Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this
Public License.
3. To the extent possible, the Licensor waives any right to
collect royalties from You for the exercise of the Licensed
Rights, whether directly or through a collecting society
under any voluntary or waivable statutory or compulsory
licensing scheme. In all other cases the Licensor expressly
reserves any right to collect such royalties.
Section 3 -- License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the
following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified
form), You must:
a. retain the following if it is supplied by the Licensor
with the Licensed Material:
i. identification of the creator(s) of the Licensed
Material and any others designated to receive
attribution, in any reasonable manner requested by
the Licensor (including by pseudonym if
designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of
warranties;
v. a URI or hyperlink to the Licensed Material to the
extent reasonably practicable;
b. indicate if You modified the Licensed Material and
retain an indication of any previous modifications; and
c. indicate the Licensed Material is licensed under this
Public License, and include the text of, or the URI or
hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any
reasonable manner based on the medium, means, and context in
which You Share the Licensed Material. For example, it may be
reasonable to satisfy the conditions by providing a URI or
hyperlink to a resource that includes the required
information.
3. If requested by the Licensor, You must remove any of the
information required by Section 3(a)(1)(A) to the extent
reasonably practicable.
b. ShareAlike.
In addition to the conditions in Section 3(a), if You Share
Adapted Material You produce, the following conditions also apply.
1. The Adapter's License You apply must be a Creative Commons
license with the same License Elements, this version or
later, or a BY-SA Compatible License.
2. You must include the text of, or the URI or hyperlink to, the
Adapter's License You apply. You may satisfy this condition
in any reasonable manner based on the medium, means, and
context in which You Share Adapted Material.
3. You may not offer or impose any additional or different terms
or conditions on, or apply any Effective Technological
Measures to, Adapted Material that restrict exercise of the
rights granted under the Adapter's License You apply.
Section 4 -- Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that
apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
to extract, reuse, reproduce, and Share all or a substantial
portion of the contents of the database;
b. if You include all or a substantial portion of the database
contents in a database in which You have Sui Generis Database
Rights, then the database in which You have Sui Generis Database
Rights (but not its individual contents) is Adapted Material,
including for purposes of Section 3(b); and
c. You must comply with the conditions in Section 3(a) if You Share
all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not
replace Your obligations under this Public License where the Licensed
Rights include other Copyright and Similar Rights.
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
c. The disclaimer of warranties and limitation of liability provided
above shall be interpreted in a manner that, to the extent
possible, most closely approximates an absolute disclaimer and
waiver of all liability.
Section 6 -- Term and Termination.
a. This Public License applies for the term of the Copyright and
Similar Rights licensed here. However, if You fail to comply with
this Public License, then Your rights under this Public License
terminate automatically.
b. Where Your right to use the Licensed Material has terminated under
Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided
it is cured within 30 days of Your discovery of the
violation; or
2. upon express reinstatement by the Licensor.
For the avoidance of doubt, this Section 6(b) does not affect any
right the Licensor may have to seek remedies for Your violations
of this Public License.
c. For the avoidance of doubt, the Licensor may also offer the
Licensed Material under separate terms or conditions or stop
distributing the Licensed Material at any time; however, doing so
will not terminate this Public License.
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
License.
Section 7 -- Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different
terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the
Licensed Material not stated herein are separate from and
independent of the terms and conditions of this Public License.
Section 8 -- Interpretation.
a. For the avoidance of doubt, this Public License does not, and
shall not be interpreted to, reduce, limit, restrict, or impose
conditions on any use of the Licensed Material that could lawfully
be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is
deemed unenforceable, it shall be automatically reformed to the
minimum extent necessary to make it enforceable. If the provision
cannot be reformed, it shall be severed from this Public License
without affecting the enforceability of the remaining terms and
conditions.
c. No term or condition of this Public License will be waived and no
failure to comply consented to unless expressly agreed to by the
Licensor.
d. Nothing in this Public License constitutes or may be interpreted
as a limitation upon, or waiver of, any privileges and immunities
that apply to the Licensor or You, including from the legal
processes of any jurisdiction or authority.
=======================================================================
Creative Commons is not a party to its public
licenses. Notwithstanding, Creative Commons may elect to apply one of
its public licenses to material it publishes and in those instances
will be considered the “Licensor.” The text of the Creative Commons
public licenses is dedicated to the public domain under the CC0 Public
Domain Dedication. Except for the limited purpose of indicating that
material is shared under a Creative Commons public license or as
otherwise permitted by the Creative Commons policies published at
creativecommons.org/policies, Creative Commons does not authorize the
use of the trademark "Creative Commons" or any other trademark or logo
of Creative Commons without its prior written consent including,
without limitation, in connection with any unauthorized modifications
to any of its public licenses or any other arrangements,
understandings, or agreements concerning use of licensed material. For
the avoidance of doubt, this paragraph does not form part of the
public licenses.
Creative Commons may be contacted at creativecommons.org.

View File

@ -1,3 +1,7 @@
HTML source code for www.RestApiTutorial.com along with the Aptana Studio project file(s). HTML source code for www.RestApiTutorial.com.
Also includes the PDF, ePub and Mobi (Kindle) versions of the associated RESTful Best Practices document. In addition, the Libre/Open Office version of the source document is included in the 'media' directory. Also includes the PDF, ePub and Mobi (Kindle) versions of the associated RESTful Best Practices document. In addition, the Libre/Open Office version of the source document is included in the 'media' directory.
![alt Creative Commons License](http://i.creativecommons.org/l/by-sa/4.0/88x31.png)
This work by <a xmlns:cc="http://creativecommons.org/ns#" href="http://www.restapitutorial.com/" property="cc:attributionName" rel="cc:attributionURL">RestApiTutorial.com</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.

1
ads.txt Normal file
View File

@ -0,0 +1 @@
google.com, pub-2093481943685202, DIRECT, f08c47fec0942fa0

View File

@ -1,13 +1,30 @@
<html> <html>
<head> <head>
<title>Moved to new URL: http://www.restapitutorial.com/lessons/httpmethods.html</title> <title>Moved to new URL: https://www.restapitutorial.com/lessons/httpmethods.html</title>
<meta http-equiv=refresh content="0; url=http://www.restapitutorial.com/lessons/httpmethods.html" /> <meta http-equiv=refresh content="0; url=https://www.restapitutorial.com/lessons/httpmethods.html" />
<meta name="robots" content="noindex,follow" /> <meta name="robots" content="noindex,follow" />
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '389059184866929');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=389059184866929&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
</head> </head>
<body> <body>
<h1>This page has been moved to http://www.restapitutorial.com/lessons/httpmethods.html</h1> <h1>This page has been moved to https://www.restapitutorial.com/lessons/httpmethods.html</h1>
<p>If your browser doesn't redirect you to the new location please <p>If your browser doesn't redirect you to the new location please
<a href="http://www.restapitutorial.com/lessons/httpmethods.html"><strong>click here</strong></a>, <a href="https://www.restapitutorial.com/lessons/httpmethods.html"><strong>click here</strong></a>,
sorry for the hassles!</p> sorry for the hassles!</p>
</body> </body>
</html> </html>

View File

@ -7,43 +7,76 @@
<meta name="description" content="HTTP status codes and how to use them in RESTful API or Web Services."> <meta name="description" content="HTTP status codes and how to use them in RESTful API or Web Services.">
<meta name="author" content="Todd Fredrich, Pearson eCollege"> <meta name="author" content="Todd Fredrich, Pearson eCollege">
<!-- Le styles --> <!-- Le styles -->
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap.min.css" rel="stylesheet"> <link href="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css" rel="stylesheet">
<style type="text/css"> <style type="text/css">
body { body {
padding-top: 60px; padding-top: 60px;
padding-bottom: 40px; padding-bottom: 40px;
} }
a {
cursor: pointer;
}
</style> </style>
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script> <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--> <![endif]-->
<script type="text/javascript"> <script type="text/javascript">
var _gaq = _gaq || []; var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31328878-1']); _gaq.push(['_setAccount', 'UA-31328878-1']);
_gaq.push(['_trackPageview']); _gaq.push(['_trackPageview']);
(function() { (function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})(); })();
</script> </script>
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '389059184866929');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=389059184866929&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="row">
<div class="span12 banner-container">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Rest API Tutorial -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-2093481943685202"
data-ad-slot="4845828438"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
<div class="row"> <div class="row">
<div class="span12"> <div class="span12">
<h1>HTTP Status Codes</h1> <h1>HTTP Status Codes</h1>
<p>This page is created from HTTP status code information found at <a href="http://www.ietf.org/assignments/http-status-codes/http-status-codes.xml" target="_blank">ietf.org</a> and <a href="http://en.wikipedia.org/wiki/HTTP_status_code" target="_blank">Wikipedia</a>. Click on the <strong>category heading</strong> or the <strong>status code</strong> link to read more.</p> <p>This page is created from HTTP status code information found at <a href="https://www.ietf.org/assignments/http-status-codes/http-status-codes.xml" target="_blank">ietf.org</a> and <a href="https://en.wikipedia.org/wiki/HTTP_status_code" target="_blank">Wikipedia</a>. Click on the <strong>category heading</strong> or the <strong>status code</strong> link to read more.</p>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="span12"> <div class="span12">
<h2><a data-toggle="collapse" data-target="#1xx" href="#">1xx Informational</a></h2> <h2><a data-toggle="collapse" data-target="#1xx">1xx Informational</a></h2>
<div id="1xx" class="collapse"> <div id="1xx" class="collapse">
<p>This class of status code indicates a provisional response, consisting only of the Status-Line and optional headers, and is terminated by an empty line. There are no required headers for this class of status code. Since HTTP/1.0 did not define any 1xx status codes, servers MUST NOT send a 1xx response to an HTTP/1.0 client except under experimental conditions.</p> <p>This class of status code indicates a provisional response, consisting only of the Status-Line and optional headers, and is terminated by an empty line. There are no required headers for this class of status code. Since HTTP/1.0 did not define any 1xx status codes, servers MUST NOT send a 1xx response to an HTTP/1.0 client except under experimental conditions.</p>
<p>A client MUST be prepared to accept one or more 1xx status responses prior to a regular response, even if the client does not expect a 100 (Continue) status message. Unexpected 1xx status responses MAY be ignored by a user agent.</p> <p>A client MUST be prepared to accept one or more 1xx status responses prior to a regular response, even if the client does not expect a 100 (Continue) status message. Unexpected 1xx status responses MAY be ignored by a user agent.</p>
@ -56,7 +89,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#continue" href="#">100 Continue</a> <a data-toggle="collapse" data-target="#continue">100 Continue</a>
<div id="continue" class="collapse"> <div id="continue" class="collapse">
<p>The client SHOULD continue with its request. This interim response is used to inform the client that the initial part of the request has been received and has not yet been rejected by the server. The client SHOULD continue by sending the remainder of the request or, if the request has already been completed, ignore this response. The server MUST send a final response after the request has been completed. See section 8.2.3 for detailed discussion of the use and handling of this status code.</p> <p>The client SHOULD continue with its request. This interim response is used to inform the client that the initial part of the request has been received and has not yet been rejected by the server. The client SHOULD continue by sending the remainder of the request or, if the request has already been completed, ignore this response. The server MUST send a final response after the request has been completed. See section 8.2.3 for detailed discussion of the use and handling of this status code.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -84,7 +117,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span12"> <div class="span12">
<h2><a data-toggle="collapse" data-target="#2xx" href="#">2xx Success</a></h2> <h2><a data-toggle="collapse" data-target="#2xx">2xx Success</a></h2>
<div id="2xx" class="collapse"> <div id="2xx" class="collapse">
<p>This class of status code indicates that the client's request was successfully received, understood, and accepted.</p> <p>This class of status code indicates that the client's request was successfully received, understood, and accepted.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -94,7 +127,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<i class="icon-star"></i> <a data-toggle="collapse" data-target="#ok" href="#">200 OK</a> <i class="icon-star"></i> <a data-toggle="collapse" data-target="#ok">200 OK</a>
<div id="ok" class="collapse"> <div id="ok" class="collapse">
<p>The request has succeeded. The information returned with the response is dependent on the method used in the request, for example: <p>The request has succeeded. The information returned with the response is dependent on the method used in the request, for example:
<ul> <ul>
@ -110,7 +143,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<i class="icon-star"></i> <a data-toggle="collapse" data-target="#created" href="#">201 Created</a> <i class="icon-star"></i> <a data-toggle="collapse" data-target="#created">201 Created</a>
<div id="created" class="collapse"> <div id="created" class="collapse">
<p>The request has been fulfilled and resulted in a new resource being created. The newly created resource can be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the resource given by a Location header field. The response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. The origin server MUST create the resource before returning the 201 status code. If the action cannot be carried out immediately, the server SHOULD respond with 202 (Accepted) response instead.</p> <p>The request has been fulfilled and resulted in a new resource being created. The newly created resource can be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the resource given by a Location header field. The response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. The origin server MUST create the resource before returning the 201 status code. If the action cannot be carried out immediately, the server SHOULD respond with 202 (Accepted) response instead.</p>
<p>A 201 response MAY contain an ETag response header field indicating the current value of the entity tag for the requested variant just created, see section 14.19.</p> <p>A 201 response MAY contain an ETag response header field indicating the current value of the entity tag for the requested variant just created, see section 14.19.</p>
@ -120,7 +153,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#accepted" href="#">202 Accepted</a> <a data-toggle="collapse" data-target="#accepted">202 Accepted</a>
<div id="accepted" class="collapse"> <div id="accepted" class="collapse">
<p>The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There is no facility for re-sending a status code from an asynchronous operation such as this.</p> <p>The request has been accepted for processing, but the processing has not been completed. The request might or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There is no facility for re-sending a status code from an asynchronous operation such as this.</p>
<p>The 202 response is intentionally non-committal. Its purpose is to allow a server to accept a request for some other process (perhaps a batch-oriented process that is only run once per day) without requiring that the user agent's connection to the server persist until the process is completed. The entity returned with this response SHOULD include an indication of the request's current status and either a pointer to a status monitor or some estimate of when the user can expect the request to be fulfilled.</p> <p>The 202 response is intentionally non-committal. Its purpose is to allow a server to accept a request for some other process (perhaps a batch-oriented process that is only run once per day) without requiring that the user agent's connection to the server persist until the process is completed. The entity returned with this response SHOULD include an indication of the request's current status and either a pointer to a status monitor or some estimate of when the user can expect the request to be fulfilled.</p>
@ -131,7 +164,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#nainfo" href="#">203 Non-Authoritative Information</a> <a data-toggle="collapse" data-target="#nainfo">203 Non-Authoritative Information</a>
<div id="nainfo" class="collapse"> <div id="nainfo" class="collapse">
<p>The returned metainformation in the entity-header is not the definitive set as available from the origin server, but is gathered from a local or a third-party copy. The set presented MAY be a subset or superset of the original version. For example, including local annotation information about the resource might result in a superset of the metainformation known by the origin server. Use of this response code is not required and is only appropriate when the response would otherwise be 200 (OK).</p> <p>The returned metainformation in the entity-header is not the definitive set as available from the origin server, but is gathered from a local or a third-party copy. The set presented MAY be a subset or superset of the original version. For example, including local annotation information about the resource might result in a superset of the metainformation known by the origin server. Use of this response code is not required and is only appropriate when the response would otherwise be 200 (OK).</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -140,18 +173,18 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<i class="icon-star"></i> <a data-toggle="collapse" data-target="#nocontent" href="#">204 No Content</a> <i class="icon-star"></i> <a data-toggle="collapse" data-target="#nocontent">204 No Content</a>
<div id="nocontent" class="collapse"> <div id="nocontent" class="collapse">
<p>The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. The response MAY include new or updated metainformation in the form of entity-headers, which if present SHOULD be associated with the requested variant.</p> <p>The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. The response MAY include new or updated metainformation in the form of entity-headers, which if present SHOULD be associated with the requested variant.</p>
<p>If the client is a user agent, it SHOULD NOT change its document view from that which caused the request to be sent. This response is primarily intended to allow input for actions to take place without causing a change to the user agent's active document view, although any new or updated metainformation SHOULD be applied to the document currently in the user agent's active view.</p> <p>If the client is a user agent, it SHOULD NOT change its document view from that which caused the request to be sent. This response is primarily intended to allow input for actions to take place without causing a change to the user agent's active document view, although any new or updated metainformation SHOULD be applied to the document currently in the user agent's active view.</p>
<p>The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty line after the header fields.</p> <p>The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty line after the header fields.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>The server successfully processed the request, but is not returning any content.</p> <p>The server successfully processed the request, but is not returning any content.</p>
<p><i class="icon-star"></i> Indicates success but nothing is in the response body, often used for DELETE and UPDATE operations.</p> <p><i class="icon-star"></i> Status when wrapped responses (e.g. JSEND) are not used and nothing is in the body (e.g. DELETE).</p>
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#resetcontent" href="#">205 Reset Content</a> <a data-toggle="collapse" data-target="#resetcontent">205 Reset Content</a>
<div id="resetcontent" class="collapse"> <div id="resetcontent" class="collapse">
<p>The server has fulfilled the request and the user agent SHOULD reset the document view which caused the request to be sent. This response is primarily intended to allow input for actions to take place via user input, followed by a clearing of the form in which the input is given so that the user can easily initiate another input action. The response MUST NOT include an entity.</p> <p>The server has fulfilled the request and the user agent SHOULD reset the document view which caused the request to be sent. This response is primarily intended to allow input for actions to take place via user input, followed by a clearing of the form in which the input is given so that the user can easily initiate another input action. The response MUST NOT include an entity.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -161,7 +194,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#partialcontent" href="#">206 Partial Content</a> <a data-toggle="collapse" data-target="#partialcontent">206 Partial Content</a>
<div id="partialcontent" class="collapse"> <div id="partialcontent" class="collapse">
<p>The server has fulfilled the partial GET request for the resource. The request MUST have included a Range header field (section 14.35) indicating the desired range, and MAY have included an If-Range header field (section 14.27) to make the request conditional.</p> <p>The server has fulfilled the partial GET request for the resource. The request MUST have included a Range header field (section 14.35) indicating the desired range, and MAY have included an If-Range header field (section 14.27) to make the request conditional.</p>
<p>The response MUST include the following header fields:</p> <p>The response MUST include the following header fields:</p>
@ -179,7 +212,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#multi_status" href="#">207 Multi-Status (WebDAV)</a> <a data-toggle="collapse" data-target="#multi_status">207 Multi-Status (WebDAV)</a>
<div id="multi_status" class="collapse"> <div id="multi_status" class="collapse">
<p>The 207 (Multi-Status) status code provides status for multiple independent operations (see section 11 for more information).</p> <p>The 207 (Multi-Status) status code provides status for multiple independent operations (see section 11 for more information).</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -187,7 +220,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#already_reported" href="#">208 Already Reported (WebDAV)</a> <a data-toggle="collapse" data-target="#already_reported">208 Already Reported (WebDAV)</a>
<div id="already_reported" class="collapse"> <div id="already_reported" class="collapse">
<p>The 208 (Already Reported) status code can be used inside a DAV: propstat response element to avoid enumerating the internal members of multiple bindings to the same collection repeatedly. For each binding to a collection inside the request's scope, only one will be reported with a 200 status, while subsequent DAV:response elements for all other bindings will use the 208 status, and no DAV:response elements for their descendants are included.</p> <p>The 208 (Already Reported) status code can be used inside a DAV: propstat response element to avoid enumerating the internal members of multiple bindings to the same collection repeatedly. For each binding to a collection inside the request's scope, only one will be reported with a 200 status, while subsequent DAV:response elements for all other bindings will use the 208 status, and no DAV:response elements for their descendants are included.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -197,7 +230,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#im_used" href="#">226 IM Used</a> <a data-toggle="collapse" data-target="#im_used">226 IM Used</a>
<div id="im_used" class="collapse"> <div id="im_used" class="collapse">
<p>The server has fulfilled a GET request for the resource, and the response is a representation of the result of one or more instance-manipulations applied to the current instance. The actual current instance might not be available except by combining this response with other previous or future responses, as appropriate for the specific instance-manipulation(s). If so, the headers of the resulting instance are the result of combining the headers from the status-226 response and the other instances, following the rules in section 13.5.3 of the HTTP/1.1 specification.</p> <p>The server has fulfilled a GET request for the resource, and the response is a representation of the result of one or more instance-manipulations applied to the current instance. The actual current instance might not be available except by combining this response with other previous or future responses, as appropriate for the specific instance-manipulation(s). If so, the headers of the resulting instance are the result of combining the headers from the status-226 response and the other instances, following the rules in section 13.5.3 of the HTTP/1.1 specification.</p>
<p>The request MUST have included an A-IM header field listing at least one instance-manipulation. The response MUST include an Etag header field giving the entity tag of the current instance.</p> <p>The request MUST have included an A-IM header field listing at least one instance-manipulation. The response MUST include an Etag header field giving the entity tag of the current instance.</p>
@ -213,7 +246,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span12"> <div class="span12">
<h2><a data-toggle="collapse" data-target="#3xx" href="#">3xx Redirection</a></h2> <h2><a data-toggle="collapse" data-target="#3xx">3xx Redirection</a></h2>
<div id="3xx" class="collapse"> <div id="3xx" class="collapse">
<p>This class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request. The action required MAY be carried out by the user agent without interaction with the user if and only if the method used in the second request is GET or HEAD. A client SHOULD detect infinite redirection loops, since such loops generate network traffic for each redirection.</p> <p>This class of status code indicates that further action needs to be taken by the user agent in order to fulfill the request. The action required MAY be carried out by the user agent without interaction with the user if and only if the method used in the second request is GET or HEAD. A client SHOULD detect infinite redirection loops, since such loops generate network traffic for each redirection.</p>
<blockquote><strong>Note:</strong> previous versions of this specification recommended a maximum of five redirections. Content developers should be aware that there might be clients that implement such a fixed limitation.</blockquote> <blockquote><strong>Note:</strong> previous versions of this specification recommended a maximum of five redirections. Content developers should be aware that there might be clients that implement such a fixed limitation.</blockquote>
@ -225,7 +258,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#multiplechoices" href="#">300 Multiple Choices</a> <a data-toggle="collapse" data-target="#multiplechoices">300 Multiple Choices</a>
<div id="multiplechoices" class="collapse"> <div id="multiplechoices" class="collapse">
<p>The requested resource corresponds to any one of a set of representations, each with its own specific location, and agent- driven negotiation information (section 12) is being provided so that the user (or user agent) can select a preferred representation and redirect its request to that location.</p> <p>The requested resource corresponds to any one of a set of representations, each with its own specific location, and agent- driven negotiation information (section 12) is being provided so that the user (or user agent) can select a preferred representation and redirect its request to that location.</p>
<p>Unless it was a HEAD request, the response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content- Type header field. Depending upon the format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.</p> <p>Unless it was a HEAD request, the response SHOULD include an entity containing a list of resource characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content- Type header field. Depending upon the format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.</p>
@ -235,7 +268,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#movepermanently" href="#">301 Moved Permanently</a> <a data-toggle="collapse" data-target="#movepermanently">301 Moved Permanently</a>
<div id="movepermanently" class="collapse"> <div id="movepermanently" class="collapse">
<p>The requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link references to the Request-URI to one or more of the new references returned by the server, where possible. This response is cacheable unless indicated otherwise.</p> <p>The requested resource has been assigned a new permanent URI and any future references to this resource SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link references to the Request-URI to one or more of the new references returned by the server, where possible. This response is cacheable unless indicated otherwise.</p>
<p>The new permanent URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).</p> <p>The new permanent URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).</p>
@ -246,7 +279,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#found" href="#">302 Found</a> <a data-toggle="collapse" data-target="#found">302 Found</a>
<div id="found" class="collapse"> <div id="found" class="collapse">
<p>The requested resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.</p> <p>The requested resource resides temporarily under a different URI. Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.</p>
<p>The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).</p> <p>The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).</p>
@ -259,7 +292,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#see_other" href="#">303 See Other</a> <a data-toggle="collapse" data-target="#see_other">303 See Other</a>
<div id="see_other" class="collapse"> <div id="see_other" class="collapse">
<p>The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on that resource. This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource. The new URI is not a substitute reference for the originally requested resource. The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable.</p> <p>The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on that resource. This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource. The new URI is not a substitute reference for the originally requested resource. The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable.</p>
<p>The different URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).</p> <p>The different URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s).</p>
@ -270,7 +303,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#not_modified" href="#">304 Not Modified</a> <i class="icon-star"></i> <a data-toggle="collapse" data-target="#not_modified">304 Not Modified</a>
<div id="not_modified" class="collapse"> <div id="not_modified" class="collapse">
<p>If the client has performed a conditional GET request and access is allowed, but the document has not been modified, the server SHOULD respond with this status code. The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields.</p> <p>If the client has performed a conditional GET request and access is allowed, but the document has not been modified, the server SHOULD respond with this status code. The 304 response MUST NOT contain a message-body, and thus is always terminated by the first empty line after the header fields.</p>
<p>The response MUST include the following header fields:</p> <p>The response MUST include the following header fields:</p>
@ -287,10 +320,11 @@
<p>If a cache uses a received 304 response to update a cache entry, the cache MUST update the entry to reflect any new field values given in the response.</p> <p>If a cache uses a received 304 response to update a cache entry, the cache MUST update the entry to reflect any new field values given in the response.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>Indicates the resource has not been modified since last requested. Typically, the HTTP client provides a header like the If-Modified-Since header to provide a time against which to compare. Using this saves bandwidth and reprocessing on both the server and client, as only the header data must be sent and received in comparison to the entirety of the page being re-processed by the server, then sent again using more bandwidth of the server and client.</p> <p>Indicates the resource has not been modified since last requested. Typically, the HTTP client provides a header like the If-Modified-Since header to provide a time against which to compare. Using this saves bandwidth and reprocessing on both the server and client, as only the header data must be sent and received in comparison to the entirety of the page being re-processed by the server, then sent again using more bandwidth of the server and client.</p>
<p><i class="icon-star"></i> Used for conditional GET calls to reduce band-width usage. If used, must set the Date, Content-Location, ETag headers to what they would have been on a regular GET call. There must be no body on the response.</p>
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#use_proxy" href="#">305 Use Proxy</a> <a data-toggle="collapse" data-target="#use_proxy">305 Use Proxy</a>
<div id="use_proxy" class="collapse"> <div id="use_proxy" class="collapse">
<p>The requested resource MUST be accessed through the proxy given by the Location field. The Location field gives the URI of the proxy. The recipient is expected to repeat this single request via the proxy. 305 responses MUST only be generated by origin servers.</p> <p>The requested resource MUST be accessed through the proxy given by the Location field. The Location field gives the URI of the proxy. The recipient is expected to repeat this single request via the proxy. 305 responses MUST only be generated by origin servers.</p>
<blockquote>Note: RFC 2068 was not clear that 305 was intended to redirect a single request, and to be generated by origin servers only. Not observing these limitations has significant security consequences.</blockquote> <blockquote>Note: RFC 2068 was not clear that 305 was intended to redirect a single request, and to be generated by origin servers only. Not observing these limitations has significant security consequences.</blockquote>
@ -301,7 +335,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#306unused" href="#">306 (Unused)</a> <a data-toggle="collapse" data-target="#306unused">306 (Unused)</a>
<div id="306unused" class="collapse"> <div id="306unused" class="collapse">
<p>The 306 status code was used in a previous version of the specification, is no longer used, and the code is reserved.</p> <p>The 306 status code was used in a previous version of the specification, is no longer used, and the code is reserved.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -309,7 +343,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#temp_redirect" href="#">307 Temporary Redirect</a> <a data-toggle="collapse" data-target="#temp_redirect">307 Temporary Redirect</a>
<div id="temp_redirect" class="collapse"> <div id="temp_redirect" class="collapse">
<p>The requested resource resides temporarily under a different URI. Since the redirection MAY be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.</p> <p>The requested resource resides temporarily under a different URI. Since the redirection MAY be altered on occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only cacheable if indicated by a Cache-Control or Expires header field.</p>
<p>The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s) , since many pre-HTTP/1.1 user agents do not understand the 307 status. Therefore, the note SHOULD contain the information necessary for a user to repeat the original request on the new URI.</p> <p>The temporary URI SHOULD be given by the Location field in the response. Unless the request method was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s) , since many pre-HTTP/1.1 user agents do not understand the 307 status. Therefore, the note SHOULD contain the information necessary for a user to repeat the original request on the new URI.</p>
@ -319,7 +353,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#perm_redirect" href="#">308 Permanent Redirect (experiemental)</a> <a data-toggle="collapse" data-target="#perm_redirect">308 Permanent Redirect (experimental)</a>
<div id="perm_redirect" class="collapse"> <div id="perm_redirect" class="collapse">
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>The request, and all future requests should be repeated using another URI. 307 and 308 (as proposed) parallel the behaviours of 302 and 301, but do not require the HTTP method to change. So, for example, submitting a form to a permanently redirected resource may continue smoothly.</p> <p>The request, and all future requests should be repeated using another URI. 307 and 308 (as proposed) parallel the behaviours of 302 and 301, but do not require the HTTP method to change. So, for example, submitting a form to a permanently redirected resource may continue smoothly.</p>
@ -339,7 +373,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<i class="icon-star"></i> <a data-toggle="collapse" data-target="#bad_request" href="#">400 Bad Request</a> <i class="icon-star"></i> <a data-toggle="collapse" data-target="#bad_request">400 Bad Request</a>
<div id="bad_request" class="collapse"> <div id="bad_request" class="collapse">
<p>The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.</p> <p>The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the request without modifications.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -348,7 +382,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<i class="icon-star"></i> <a data-toggle="collapse" data-target="#unauthorized" href="#">401 Unauthorized</a> <i class="icon-star"></i> <a data-toggle="collapse" data-target="#unauthorized">401 Unauthorized</a>
<div id="unauthorized" class="collapse"> <div id="unauthorized" class="collapse">
<p>The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request with a suitable Authorization header field (section 14.8). If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user SHOULD be presented the entity that was given in the response, since that entity might include relevant diagnostic information. HTTP access authentication is explained in "HTTP Authentication: Basic and Digest Access Authentication".</p> <p>The request requires user authentication. The response MUST include a WWW-Authenticate header field (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request with a suitable Authorization header field (section 14.8). If the request already included Authorization credentials, then the 401 response indicates that authorization has been refused for those credentials. If the 401 response contains the same challenge as the prior response, and the user agent has already attempted authentication at least once, then the user SHOULD be presented the entity that was given in the response, since that entity might include relevant diagnostic information. HTTP access authentication is explained in "HTTP Authentication: Basic and Digest Access Authentication".</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -357,7 +391,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#pmt_required" href="#">402 Payment Required</a> <a data-toggle="collapse" data-target="#pmt_required">402 Payment Required</a>
<div id="pmt_required" class="collapse"> <div id="pmt_required" class="collapse">
<p>This code is reserved for future use.</p> <p>This code is reserved for future use.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -367,7 +401,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<i class="icon-star"></i> <a data-toggle="collapse" data-target="#forbidden" href="#">403 Forbidden</a> <i class="icon-star"></i> <a data-toggle="collapse" data-target="#forbidden">403 Forbidden</a>
<div id="forbidden" class="collapse"> <div id="forbidden" class="collapse">
<p>The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information available to the client, the status code 404 (Not Found) can be used instead.</p> <p>The server understood the request, but is refusing to fulfill it. Authorization will not help and the request SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server does not wish to make this information available to the client, the status code 404 (Not Found) can be used instead.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -376,7 +410,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<i class="icon-star"></i> <a data-toggle="collapse" data-target="#not_found" href="#">404 Not Found</a> <i class="icon-star"></i> <a data-toggle="collapse" data-target="#not_found">404 Not Found</a>
<div id="not_found" class="collapse"> <div id="not_found" class="collapse">
<p>The server has not found anything matching the Request-URI. No indication is given of whether the condition is temporary or permanent. The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable.</p> <p>The server has not found anything matching the Request-URI. No indication is given of whether the condition is temporary or permanent. The 410 (Gone) status code SHOULD be used if the server knows, through some internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding address. This status code is commonly used when the server does not wish to reveal exactly why the request has been refused, or when no other response is applicable.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -385,18 +419,17 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<i class="icon-star"></i> <a data-toggle="collapse" data-target="#method_no_allowed" href="#">405 Method Not Allowed</a> <a data-toggle="collapse" data-target="#method_no_allowed">405 Method Not Allowed</a>
<div id="method_no_allowed" class="collapse"> <div id="method_no_allowed" class="collapse">
<p>The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. The response MUST include an Allow header containing a list of valid methods for the requested resource.</p> <p>The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. The response MUST include an Allow header containing a list of valid methods for the requested resource.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>A request was made of a resource using a request method not supported by that resource; for example, using GET on a form which requires data to be presented via POST, or using PUT on a read-only resource.</p> <p>A request was made of a resource using a request method not supported by that resource; for example, using GET on a form which requires data to be presented via POST, or using PUT on a read-only resource.</p>
<p><i class="icon-star"></i> Used to indicate that the requested URL exists, but the requested HTTP method is not applicable. For example, <em>POST /users/12345</em> where the API doesn't support creation of resources this way (with a provided ID). The Allow HTTP header must be set when returning a 405 to indicate the HTTP methods that are supported. In the previous case, the header would look like &quot;Allow: GET, PUT, DELETE&quot;</p>
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#not_acceptable" href="#">406 Not Acceptable</a> <a data-toggle="collapse" data-target="#not_acceptable">406 Not Acceptable</a>
<div id="not_acceptable" class="collapse"> <div id="not_acceptable" class="collapse">
<p>The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request.</p> <p>The resource identified by the request is only capable of generating response entities which have content characteristics not acceptable according to the accept headers sent in the request.</p>
<p>Unless it was a HEAD request, the response SHOULD include an entity containing a list of available entity characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. Depending upon the format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.</p> <p>Unless it was a HEAD request, the response SHOULD include an entity containing a list of available entity characteristics and location(s) from which the user or user agent can choose the one most appropriate. The entity format is specified by the media type given in the Content-Type header field. Depending upon the format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed automatically. However, this specification does not define any standard for such automatic selection.</p>
@ -407,7 +440,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#proxy_auth_rqd" href="#">407 Proxy Authentication Required</a> <a data-toggle="collapse" data-target="#proxy_auth_rqd">407 Proxy Authentication Required</a>
<div id="proxy_auth_rqd" class="collapse"> <div id="proxy_auth_rqd" class="collapse">
<p>This code is similar to 401 (Unauthorized), but indicates that the client must first authenticate itself with the proxy. The proxy MUST return a Proxy-Authenticate header field (section 14.33) containing a challenge applicable to the proxy for the requested resource. The client MAY repeat the request with a suitable Proxy-Authorization header field (section 14.34). HTTP access authentication is explained in "HTTP Authentication: Basic and Digest Access Authentication".</p> <p>This code is similar to 401 (Unauthorized), but indicates that the client must first authenticate itself with the proxy. The proxy MUST return a Proxy-Authenticate header field (section 14.33) containing a challenge applicable to the proxy for the requested resource. The client MAY repeat the request with a suitable Proxy-Authorization header field (section 14.34). HTTP access authentication is explained in "HTTP Authentication: Basic and Digest Access Authentication".</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -415,7 +448,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#request_timeout" href="#">408 Request Timeout</a> <a data-toggle="collapse" data-target="#request_timeout">408 Request Timeout</a>
<div id="request_timeout" class="collapse"> <div id="request_timeout" class="collapse">
<p>The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time.</p> <p>The client did not produce a request within the time that the server was prepared to wait. The client MAY repeat the request without modifications at any later time.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -425,7 +458,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<i class="icon-star"></i> <a data-toggle="collapse" data-target="#conflict" href="#">409 Conflict</a> <i class="icon-star"></i> <a data-toggle="collapse" data-target="#conflict">409 Conflict</a>
<div id="conflict" class="collapse"> <div id="conflict" class="collapse">
<p>The request could not be completed due to a conflict with the current state of the resource. This code is only allowed in situations where it is expected that the user might be able to resolve the conflict and resubmit the request. The response body SHOULD include enough information for the user to recognize the source of the conflict. Ideally, the response entity would include enough information for the user or user agent to fix the problem; however, that might not be possible and is not required.</p> <p>The request could not be completed due to a conflict with the current state of the resource. This code is only allowed in situations where it is expected that the user might be able to resolve the conflict and resubmit the request. The response body SHOULD include enough information for the user to recognize the source of the conflict. Ideally, the response entity would include enough information for the user or user agent to fix the problem; however, that might not be possible and is not required.</p>
<p>Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being used and the entity being PUT included changes to a resource which conflict with those made by an earlier (third-party) request, the server might use the 409 response to indicate that it can't complete the request. In this case, the response entity would likely contain a list of the differences between the two versions in a format defined by the response Content-Type.</p> <p>Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being used and the entity being PUT included changes to a resource which conflict with those made by an earlier (third-party) request, the server might use the 409 response to indicate that it can't complete the request. In this case, the response entity would likely contain a list of the differences between the two versions in a format defined by the response Content-Type.</p>
@ -435,7 +468,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#gone" href="#">410 Gone</a> <a data-toggle="collapse" data-target="#gone">410 Gone</a>
<div id="gone" class="collapse"> <div id="gone" class="collapse">
<p>The requested resource is no longer available at the server and no forwarding address is known. This condition is expected to be considered permanent. Clients with link editing capabilities SHOULD delete references to the Request-URI after user approval. If the server does not know, or has no facility to determine, whether or not the condition is permanent, the status code 404 (Not Found) SHOULD be used instead. This response is cacheable unless indicated otherwise.</p> <p>The requested resource is no longer available at the server and no forwarding address is known. This condition is expected to be considered permanent. Clients with link editing capabilities SHOULD delete references to the Request-URI after user approval. If the server does not know, or has no facility to determine, whether or not the condition is permanent, the status code 404 (Not Found) SHOULD be used instead. This response is cacheable unless indicated otherwise.</p>
<p>The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient that the resource is intentionally unavailable and that the server owners desire that remote links to that resource be removed. Such an event is common for limited-time, promotional services and for resources belonging to individuals no longer working at the server's site. It is not necessary to mark all permanently unavailable resources as "gone" or to keep the mark for any length of time -- that is left to the discretion of the server owner.</p> <p>The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient that the resource is intentionally unavailable and that the server owners desire that remote links to that resource be removed. Such an event is common for limited-time, promotional services and for resources belonging to individuals no longer working at the server's site. It is not necessary to mark all permanently unavailable resources as "gone" or to keep the mark for any length of time -- that is left to the discretion of the server owner.</p>
@ -444,7 +477,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#length_rqd" href="#">411 Length Required</a> <a data-toggle="collapse" data-target="#length_rqd">411 Length Required</a>
<div id="length_rqd" class="collapse"> <div id="length_rqd" class="collapse">
<p>The server refuses to accept the request without a defined Content- Length. The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message-body in the request message.</p> <p>The server refuses to accept the request without a defined Content- Length. The client MAY repeat the request if it adds a valid Content-Length header field containing the length of the message-body in the request message.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -454,7 +487,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#precondition_failed" href="#">412 Precondition Failed</a> <a data-toggle="collapse" data-target="#precondition_failed">412 Precondition Failed</a>
<div id="precondition_failed" class="collapse"> <div id="precondition_failed" class="collapse">
<p>The precondition given in one or more of the request-header fields evaluated to false when it was tested on the server. This response code allows the client to place preconditions on the current resource metainformation (header field data) and thus prevent the requested method from being applied to a resource other than the one intended.</p> <p>The precondition given in one or more of the request-header fields evaluated to false when it was tested on the server. This response code allows the client to place preconditions on the current resource metainformation (header field data) and thus prevent the requested method from being applied to a resource other than the one intended.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -462,7 +495,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#request_entity_too_large" href="#">413 Request Entity Too Large</a> <a data-toggle="collapse" data-target="#request_entity_too_large">413 Request Entity Too Large</a>
<div id="request_entity_too_large" class="collapse"> <div id="request_entity_too_large" class="collapse">
<p>The server is refusing to process a request because the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request.</p> <p>The server is refusing to process a request because the request entity is larger than the server is willing or able to process. The server MAY close the connection to prevent the client from continuing the request.</p>
<p>If the condition is temporary, the server SHOULD include a Retry- After header field to indicate that it is temporary and after what time the client MAY try again.</p> <p>If the condition is temporary, the server SHOULD include a Retry- After header field to indicate that it is temporary and after what time the client MAY try again.</p>
@ -471,7 +504,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#request_uri_too_long" href="#">414 Request-URI Too Long</a> <a data-toggle="collapse" data-target="#request_uri_too_long">414 Request-URI Too Long</a>
<div id="request_uri_too_long" class="collapse"> <div id="request_uri_too_long" class="collapse">
<p>The server is refusing to service the request because the Request-URI is longer than the server is willing to interpret. This rare condition is only likely to occur when a client has improperly converted a POST request to a GET request with long query information, when the client has descended into a URI "black hole" of redirection (e.g., a redirected URI prefix that points to a suffix of itself), or when the server is under attack by a client attempting to exploit security holes present in some servers using fixed-length buffers for reading or manipulating the Request-URI.</p> <p>The server is refusing to service the request because the Request-URI is longer than the server is willing to interpret. This rare condition is only likely to occur when a client has improperly converted a POST request to a GET request with long query information, when the client has descended into a URI "black hole" of redirection (e.g., a redirected URI prefix that points to a suffix of itself), or when the server is under attack by a client attempting to exploit security holes present in some servers using fixed-length buffers for reading or manipulating the Request-URI.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -481,7 +514,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#unsupported_media_type" href="#">415 Unsupported Media Type</a> <a data-toggle="collapse" data-target="#unsupported_media_type">415 Unsupported Media Type</a>
<div id="unsupported_media_type" class="collapse"> <div id="unsupported_media_type" class="collapse">
<p>The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method.</p> <p>The server is refusing to service the request because the entity of the request is in a format not supported by the requested resource for the requested method.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -489,7 +522,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#requested_range_not_satisfiable" href="#">416 Requested Range Not Satisfiable</a> <a data-toggle="collapse" data-target="#requested_range_not_satisfiable">416 Requested Range Not Satisfiable</a>
<div id="requested_range_not_satisfiable" class="collapse"> <div id="requested_range_not_satisfiable" class="collapse">
<p>A server SHOULD return a response with this status code if a request included a Range request-header field (section 14.35), and none of the range-specifier values in this field overlap the current extent of the selected resource, and the request did not include an If-Range request-header field. (For byte-ranges, this means that the first- byte-pos of all of the byte-range-spec values were greater than the current length of the selected resource.)</p> <p>A server SHOULD return a response with this status code if a request included a Range request-header field (section 14.35), and none of the range-specifier values in this field overlap the current extent of the selected resource, and the request did not include an If-Range request-header field. (For byte-ranges, this means that the first- byte-pos of all of the byte-range-spec values were greater than the current length of the selected resource.)</p>
<p>When this status code is returned for a byte-range request, the response SHOULD include a Content-Range entity-header field specifying the current length of the selected resource (see section 14.16). This response MUST NOT use the multipart/byteranges content- type.</p> <p>When this status code is returned for a byte-range request, the response SHOULD include a Content-Range entity-header field specifying the current length of the selected resource (see section 14.16). This response MUST NOT use the multipart/byteranges content- type.</p>
@ -498,7 +531,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#expectation_failed" href="#">417 Expectation Failed</a> <a data-toggle="collapse" data-target="#expectation_failed">417 Expectation Failed</a>
<div id="expectation_failed" class="collapse"> <div id="expectation_failed" class="collapse">
<p>The expectation given in an Expect request-header field (see section 14.20) could not be met by this server, or, if the server is a proxy, the server has unambiguous evidence that the request could not be met by the next-hop server.</p> <p>The expectation given in an Expect request-header field (see section 14.20) could not be met by this server, or, if the server is a proxy, the server has unambiguous evidence that the request could not be met by the next-hop server.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -508,21 +541,21 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#teapot" href="#">418 I'm a teapot (RFC 2324)</a> <a data-toggle="collapse" data-target="#teapot">418 I'm a teapot (RFC 2324)</a>
<div id="teapot" class="collapse"> <div id="teapot" class="collapse">
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>This code was defined in 1998 as one of the traditional IETF April Fools' jokes, in RFC 2324, Hyper Text Coffee Pot Control Protocol, and is not expected to be implemented by actual HTTP servers. However, known implementations do exist. An Nginx HTTP server uses this code to simulate goto-like behaviour in its configuration.</p> <p>This code was defined in 1998 as one of the traditional IETF April Fools' jokes, in RFC 2324, Hyper Text Coffee Pot Control Protocol, and is not expected to be implemented by actual HTTP servers. However, known implementations do exist. An Nginx HTTP server uses this code to simulate goto-like behaviour in its configuration.</p>
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#enhance_your_calm" href="#">420 Enhance Your Calm (Twitter)</a> <a data-toggle="collapse" data-target="#enhance_your_calm">420 Enhance Your Calm (Twitter)</a>
<div id="enhance_your_calm" class="collapse"> <div id="enhance_your_calm" class="collapse">
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>Returned by the Twitter Search and Trends API when the client is being rate limited. Likely a reference to this number's association with marijuana. Other services may wish to implement the 429 Too Many Requests response code instead.</p> <p>Returned by the Twitter Search and Trends API when the client is being rate limited. The text is a quote from 'Demolition Man' and the '420' code is likely a reference to this number's association with marijuana. Other services may wish to implement the 429 Too Many Requests response code instead.</p>
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#unprocessable_entity" href="#">422 Unprocessable Entity (WebDAV)</a> <a data-toggle="collapse" data-target="#unprocessable_entity">422 Unprocessable Entity (WebDAV)</a>
<div id="unprocessable_entity" class="collapse"> <div id="unprocessable_entity" class="collapse">
<p>The 422 (Unprocessable Entity) status code means the server understands the content type of the request entity (hence a 415(Unsupported Media Type) status code is inappropriate), and the syntax of the request entity is correct (thus a 400 (Bad Request) status code is inappropriate) but was unable to process the contained instructions. For example, this error condition may occur if an XML request body contains well-formed (i.e., syntactically correct), but semantically erroneous, XML instructions.</p> <p>The 422 (Unprocessable Entity) status code means the server understands the content type of the request entity (hence a 415(Unsupported Media Type) status code is inappropriate), and the syntax of the request entity is correct (thus a 400 (Bad Request) status code is inappropriate) but was unable to process the contained instructions. For example, this error condition may occur if an XML request body contains well-formed (i.e., syntactically correct), but semantically erroneous, XML instructions.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -532,7 +565,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#locked" href="#">423 Locked (WebDAV)</a> <a data-toggle="collapse" data-target="#locked">423 Locked (WebDAV)</a>
<div id="locked" class="collapse"> <div id="locked" class="collapse">
<p>The 423 (Locked) status code means the source or destination resource of a method is locked. This response SHOULD contain an appropriate precondition or postcondition code, such as 'lock-token-submitted' or 'no-conflicting-lock'.</p> <p>The 423 (Locked) status code means the source or destination resource of a method is locked. This response SHOULD contain an appropriate precondition or postcondition code, such as 'lock-token-submitted' or 'no-conflicting-lock'.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -540,7 +573,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#failed_dependency" href="#">424 Failed Dependency (WebDAV)</a> <a data-toggle="collapse" data-target="#failed_dependency">424 Failed Dependency (WebDAV)</a>
<div id="failed_dependency" class="collapse"> <div id="failed_dependency" class="collapse">
<p>The 424 (Failed Dependency) status code means that the method could not be performed on the resource because the requested action depended on another action and that action failed. For example, if a command in a PROPPATCH method fails, then, at minimum, the rest of the commands will also fail with 424 (Failed Dependency).</p> <p>The 424 (Failed Dependency) status code means that the method could not be performed on the resource because the requested action depended on another action and that action failed. For example, if a command in a PROPPATCH method fails, then, at minimum, the rest of the commands will also fail with 424 (Failed Dependency).</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -548,7 +581,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#adv_collections_expired" href="#">425 Reserved for WebDAV</a> <a data-toggle="collapse" data-target="#adv_collections_expired">425 Reserved for WebDAV</a>
<div id="adv_collections_expired" class="collapse"> <div id="adv_collections_expired" class="collapse">
<p>Slein, J., Whitehead, E.J., et al., &quot;WebDAV Advanced Collections Protocol&quot;, Work In Progress.</p> <p>Slein, J., Whitehead, E.J., et al., &quot;WebDAV Advanced Collections Protocol&quot;, Work In Progress.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -558,7 +591,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#upgrade_required" href="#">426 Upgrade Required</a> <a data-toggle="collapse" data-target="#upgrade_required">426 Upgrade Required</a>
<div id="upgrade_required" class="collapse"> <div id="upgrade_required" class="collapse">
<p>Reliable, interoperable negotiation of Upgrade features requires an unambiguous failure signal. The 426 Upgrade Required status code allows a server to definitively state the precise protocol extensions a given resource must be served with.</p> <p>Reliable, interoperable negotiation of Upgrade features requires an unambiguous failure signal. The 426 Upgrade Required status code allows a server to definitively state the precise protocol extensions a given resource must be served with.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -566,48 +599,48 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#precondition_required" href="#">428 Precondition Required (draft)</a> <a data-toggle="collapse" data-target="#precondition_required">428 Precondition Required</a>
<div id="precondition_required" class="collapse"> <div id="precondition_required" class="collapse">
<p>The 428 status code indicates that the origin server requires the request to be conditional.</p> <p>The 428 status code indicates that the origin server requires the request to be conditional.</p>
<p>Its typical use is to avoid the "lost update" problem, where a client GETs a resource's state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict. By requiring requests to be conditional, the server can assure that clients are working with the correct copies.</p> <p>Its typical use is to avoid the "lost update" problem, where a client GETs a resource's state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict. By requiring requests to be conditional, the server can assure that clients are working with the correct copies.</p>
<p>Responses using this status code SHOULD explain how to resubmit the request successfully.</p> <p>Responses using this status code SHOULD explain how to resubmit the request successfully.</p>
<p>The 428 status code is optional; clients cannot rely upon its use to prevent &quot;lost update&quot; conflicts.</p> <p>The 428 status code is optional; clients cannot rely upon its use to prevent &quot;lost update&quot; conflicts.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>The origin server requires the request to be conditional. Intended to prevent &quot;the 'lost update' problem, where a client GETs a resource's state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict.&quot; Specified in an Internet-Draft which is approved for publication as RFC.</p> <p>The origin server requires the request to be conditional. Intended to prevent "the &quot;lost update&quot; problem, where a client GETs a resource's state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict.</p>
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#too_many_requests" href="#">429 Too Many Requests (draft)</a> <a data-toggle="collapse" data-target="#too_many_requests">429 Too Many Requests</a>
<div id="too_many_requests" class="collapse"> <div id="too_many_requests" class="collapse">
<p>The 429 status code indicates that the user has sent too many requests in a given amount of time ("rate limiting").</p> <p>The 429 status code indicates that the user has sent too many requests in a given amount of time ("rate limiting").</p>
<p>The response representations SHOULD include details explaining the condition, and MAY include a Retry-After header indicating how long to wait before making a new request.</p> <p>The response representations SHOULD include details explaining the condition, and MAY include a Retry-After header indicating how long to wait before making a new request.</p>
<p>When a server is under attack or just receiving a very large number of requests from a single party, responding to each with a 429 status code will consume resources.</p> <p>When a server is under attack or just receiving a very large number of requests from a single party, responding to each with a 429 status code will consume resources.</p>
<p>Therefore, servers are not required to use the 429 status code; when limiting resource usage, it may be more appropriate to just drop connections, or take other steps.</p> <p>Therefore, servers are not required to use the 429 status code; when limiting resource usage, it may be more appropriate to just drop connections, or take other steps.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>The user has sent too many requests in a given amount of time. Intended for use with rate limiting schemes. Specified in an Internet-Draft which is approved for publication as RFC.</p> <p>The user has sent too many requests in a given amount of time. Intended for use with rate limiting schemes.</p>
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#request_header_fields_too_large" href="#">431 Request Header Fields Too Large (draft)</a> <a data-toggle="collapse" data-target="#request_header_fields_too_large">431 Request Header Fields Too Large</a>
<div id="request_header_fields_too_large" class="collapse"> <div id="request_header_fields_too_large" class="collapse">
<p>The 431 status code indicates that the server is unwilling to process the request because its header fields are too large. The request MAY be resubmitted after reducing the size of the request header fields.</p> <p>The 431 status code indicates that the server is unwilling to process the request because its header fields are too large. The request MAY be resubmitted after reducing the size of the request header fields.</p>
<p>It can be used both when the set of request header fields in total are too large, and when a single header field is at fault. In the latter case, the response representation SHOULD specify which header field was too large.</p> <p>It can be used both when the set of request header fields in total are too large, and when a single header field is at fault. In the latter case, the response representation SHOULD specify which header field was too large.</p>
<p>Servers are not required to use the 431 status code; when under attack, it may be more appropriate to just drop connections, or take other steps.</p> <p>Servers are not required to use the 431 status code; when under attack, it may be more appropriate to just drop connections, or take other steps.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>The server is unwilling to process the request because either an individual header field, or all the header fields collectively, are too large. Specified in an Internet-Draft which is approved for publication as RFC.</p> <p>The server is unwilling to process the request because either an individual header field, or all the header fields collectively, are too large.</p>
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#no_response_nginx" href="#">444 No Response (Nginx)</a> <a data-toggle="collapse" data-target="#no_response_nginx">444 No Response (Nginx)</a>
<div id="no_response_nginx" class="collapse"> <div id="no_response_nginx" class="collapse">
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>An Nginx HTTP server extension. The server returns no information to the client and closes the connection (useful as a deterrent for malware).</p> <p>An Nginx HTTP server extension. The server returns no information to the client and closes the connection (useful as a deterrent for malware).</p>
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#retry_with" href="#">449 Retry With (Microsoft)</a> <a data-toggle="collapse" data-target="#retry_with">449 Retry With (Microsoft)</a>
<div id="retry_with" class="collapse"> <div id="retry_with" class="collapse">
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>A Microsoft extension. The request should be retried after performing the appropriate action.</p> <p>A Microsoft extension. The request should be retried after performing the appropriate action.</p>
@ -616,14 +649,21 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#blocked_by_windows_parental" href="#">450 Blocked by Windows Parental Controls (Microsoft)</a> <a data-toggle="collapse" data-target="#blocked_by_windows_parental">450 Blocked by Windows Parental Controls (Microsoft)</a>
<div id="blocked_by_windows_parental" class="collapse"> <div id="blocked_by_windows_parental" class="collapse">
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>A Microsoft extension. This error is given when Windows Parental Controls are turned on and are blocking access to the given webpage.</p> <p>A Microsoft extension. This error is given when Windows Parental Controls are turned on and are blocking access to the given webpage.</p>
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#client_closed_request" href="#">499 Client Closed Request (Nginx)</a> <a data-toggle="collapse" data-target="#unavailable_for_legal_reasons">451 Unavailable For Legal Reasons</a>
<div id="unavailable_for_legal_reasons" class="collapse">
<h3>Wikipedia</h3>
<p>Intended to be used when resource access is denied for legal reasons, e.g. censorship or government-mandated blocked access. A reference to the 1953 dystopian novel Fahrenheit 451, where books are outlawed, and the autoignition temperature of paper, 451°F.</p>
</div>
</div>
<div class="span4">
<a data-toggle="collapse" data-target="#client_closed_request">499 Client Closed Request (Nginx)</a>
<div id="client_closed_request" class="collapse"> <div id="client_closed_request" class="collapse">
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>An Nginx HTTP server extension. This code is introduced to log the case when the connection is closed by client while HTTP server is processing its request, making server unable to send the HTTP header back.</p> <p>An Nginx HTTP server extension. This code is introduced to log the case when the connection is closed by client while HTTP server is processing its request, making server unable to send the HTTP header back.</p>
@ -646,16 +686,16 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<i class="icon-star"></i> <a data-toggle="collapse" data-target="#internal_server_error" href="#">500 Internal Server Error</a> <i class="icon-star"></i> <a data-toggle="collapse" data-target="#internal_server_error">500 Internal Server Error</a>
<div id="internal_server_error" class="collapse"> <div id="internal_server_error" class="collapse">
<p>The server encountered an unexpected condition which prevented it from fulfilling the request.</p> <p>The server encountered an unexpected condition which prevented it from fulfilling the request.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>A generic error message, given when no more specific message is suitable.</p> <p>A generic error message, given when no more specific message is suitable.</p>
<p><i class="icon-star"></i> The general catch-all error when the server-side throws an exception. Use this only for errors that the consumer cannot address from their end&mdash;never return this intentionally.</p> <p><i class="icon-star"></i> The general catch-all error when the server-side throws an exception.</p>
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#not_implemented" href="#">501 Not Implemented</a> <a data-toggle="collapse" data-target="#not_implemented">501 Not Implemented</a>
<div id="not_implemented" class="collapse"> <div id="not_implemented" class="collapse">
<p>The server does not support the functionality required to fulfill the request. This is the appropriate response when the server does not recognize the request method and is not capable of supporting it for any resource.</p> <p>The server does not support the functionality required to fulfill the request. This is the appropriate response when the server does not recognize the request method and is not capable of supporting it for any resource.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -663,7 +703,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#bad_gateway" href="#">502 Bad Gateway</a> <a data-toggle="collapse" data-target="#bad_gateway">502 Bad Gateway</a>
<div id="bad_gateway" class="collapse"> <div id="bad_gateway" class="collapse">
<p>The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.</p> <p>The server, while acting as a gateway or proxy, received an invalid response from the upstream server it accessed in attempting to fulfill the request.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -673,7 +713,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#service_unavailable" href="#">503 Service Unavailable</a> <a data-toggle="collapse" data-target="#service_unavailable">503 Service Unavailable</a>
<div id="service_unavailable" class="collapse"> <div id="service_unavailable" class="collapse">
<p>The server is currently unable to handle the request due to a temporary overloading or maintenance of the server. The implication is that this is a temporary condition which will be alleviated after some delay. If known, the length of the delay MAY be indicated in a Retry-After header. If no Retry-After is given, the client SHOULD handle the response as it would for a 500 response.</p> <p>The server is currently unable to handle the request due to a temporary overloading or maintenance of the server. The implication is that this is a temporary condition which will be alleviated after some delay. If known, the length of the delay MAY be indicated in a Retry-After header. If no Retry-After is given, the client SHOULD handle the response as it would for a 500 response.</p>
<blockquote>Note: The existence of the 503 status code does not imply that a server must use it when becoming overloaded. Some servers may wish to simply refuse the connection.</blockquote> <blockquote>Note: The existence of the 503 status code does not imply that a server must use it when becoming overloaded. Some servers may wish to simply refuse the connection.</blockquote>
@ -682,7 +722,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#gateway_timeout" href="#">504 Gateway Timeout</a> <a data-toggle="collapse" data-target="#gateway_timeout">504 Gateway Timeout</a>
<div id="gateway_timeout" class="collapse"> <div id="gateway_timeout" class="collapse">
<p>The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URI (e.g. HTTP, FTP, LDAP) or some other auxiliary server (e.g. DNS) it needed to access in attempting to complete the request.</p> <p>The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server specified by the URI (e.g. HTTP, FTP, LDAP) or some other auxiliary server (e.g. DNS) it needed to access in attempting to complete the request.</p>
<blockquote>Note: Note to implementors: some deployed proxies are known to return 400 or 500 when DNS lookups time out.</blockquote> <blockquote>Note: Note to implementors: some deployed proxies are known to return 400 or 500 when DNS lookups time out.</blockquote>
@ -691,7 +731,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#version_not_supported" href="#">505 HTTP Version Not Supported</a> <a data-toggle="collapse" data-target="#version_not_supported">505 HTTP Version Not Supported</a>
<div id="version_not_supported" class="collapse"> <div id="version_not_supported" class="collapse">
<p>The server does not support, or refuses to support, the HTTP protocol version that was used in the request message. The server is indicating that it is unable or unwilling to complete the request using the same major version as the client, as described in section 3.1, other than with this error message. The response SHOULD contain an entity describing why that version is not supported and what other protocols are supported by that server.</p> <p>The server does not support, or refuses to support, the HTTP protocol version that was used in the request message. The server is indicating that it is unable or unwilling to complete the request using the same major version as the client, as described in section 3.1, other than with this error message. The response SHOULD contain an entity describing why that version is not supported and what other protocols are supported by that server.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -701,7 +741,7 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#variant_also_negotiates" href="#">506 Variant Also Negotiates (Experimental)</a> <a data-toggle="collapse" data-target="#variant_also_negotiates">506 Variant Also Negotiates (Experimental)</a>
<div id="variant_also_negotiates" class="collapse"> <div id="variant_also_negotiates" class="collapse">
<p>The 506 status code indicates that the server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.</p> <p>The 506 status code indicates that the server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -709,7 +749,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#insufficient_storage" href="#">507 Insufficient Storage (WebDAV)</a> <a data-toggle="collapse" data-target="#insufficient_storage">507 Insufficient Storage (WebDAV)</a>
<div id="insufficient_storage" class="collapse"> <div id="insufficient_storage" class="collapse">
<p>The 507 (Insufficient Storage) status code means the method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request. This condition is considered to be temporary. If the request that received this status code was the result of a user action, the request MUST NOT be repeated until it is requested by a separate user action.</p> <p>The 507 (Insufficient Storage) status code means the method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request. This condition is considered to be temporary. If the request that received this status code was the result of a user action, the request MUST NOT be repeated until it is requested by a separate user action.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -717,7 +757,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#loop_detected" href="#">508 Loop Detected (WebDAV)</a> <a data-toggle="collapse" data-target="#loop_detected">508 Loop Detected (WebDAV)</a>
<div id="loop_detected" class="collapse"> <div id="loop_detected" class="collapse">
<p>The 508 (Loop Detected) status code indicates that the server terminated an operation because it encountered an infinite loop while processing a request with &quot;Depth: infinity&quot;. This status indicates that the entire operation failed.</p> <p>The 508 (Loop Detected) status code indicates that the server terminated an operation because it encountered an infinite loop while processing a request with &quot;Depth: infinity&quot;. This status indicates that the entire operation failed.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
@ -727,14 +767,14 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#bandwidth_limit_exceeded" href="#">509 Bandwidth Limit Exceeded (Apache)</a> <a data-toggle="collapse" data-target="#bandwidth_limit_exceeded">509 Bandwidth Limit Exceeded (Apache)</a>
<div id="bandwidth_limit_exceeded" class="collapse"> <div id="bandwidth_limit_exceeded" class="collapse">
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>This status code, while used by many servers, is not specified in any RFCs.</p> <p>This status code, while used by many servers, is not specified in any RFCs.</p>
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#not_extended" href="#">510 Not Extended</a> <a data-toggle="collapse" data-target="#not_extended">510 Not Extended</a>
<div id="not_extended" class="collapse"> <div id="not_extended" class="collapse">
<p>The policy for accessing the resource has not been met in the request. The server should send back all the information necessary for the client to issue an extended request. It is outside the scope of this specification to specify how the extensions inform the client.</p> <p>The policy for accessing the resource has not been met in the request. The server should send back all the information necessary for the client to issue an extended request. It is outside the scope of this specification to specify how the extensions inform the client.</p>
<p>If the 510 response contains information about extensions that were not present in the initial request then the client MAY repeat the request if it has reason to believe it can fulfill the extension policy by modifying the request according to the information provided in the 510 response. Otherwise the client MAY present any entity included in the 510 response to the user, since that entity may include relevant diagnostic information.</p> <p>If the 510 response contains information about extensions that were not present in the initial request then the client MAY repeat the request if it has reason to believe it can fulfill the extension policy by modifying the request according to the information provided in the 510 response. Otherwise the client MAY present any entity included in the 510 response to the user, since that entity may include relevant diagnostic information.</p>
@ -743,7 +783,7 @@
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#net_authn_required" href="#">511 Network Authentication Required (draft)</a> <a data-toggle="collapse" data-target="#net_authn_required">511 Network Authentication Required</a>
<div id="net_authn_required" class="collapse"> <div id="net_authn_required" class="collapse">
<p>The 511 status code indicates that the client needs to authenticate to gain network access.</p> <p>The 511 status code indicates that the client needs to authenticate to gain network access.</p>
<p>The response representation SHOULD contain a link to a resource that allows the user to submit credentials (e.g. with a HTML form).</p> <p>The response representation SHOULD contain a link to a resource that allows the user to submit credentials (e.g. with a HTML form).</p>
@ -757,20 +797,20 @@
<p>However, these risks are not unique to the 511 status code; in other words, a captive portal that is not using this status code introduces the same issues.</p> <p>However, these risks are not unique to the 511 status code; in other words, a captive portal that is not using this status code introduces the same issues.</p>
<p>Also, note that captive portals using this status code on an SSL or TLS connection (commonly, port 443) will generate a certificate error on the client.</p> <p>Also, note that captive portals using this status code on an SSL or TLS connection (commonly, port 443) will generate a certificate error on the client.</p>
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>The client needs to authenticate to gain network access. Intended for use by intercepting proxies used to control access to the network (e.g. &quot;captive portals&quot; used to require agreement to Terms of Service before granting full Internet access via a Wi-Fi hotspot). Specified in an Internet-Draft which is approved for publication as RFC.</p> <p>The client needs to authenticate to gain network access. Intended for use by intercepting proxies used to control access to the network (e.g., &quot;captive portals&quot; used to require agreement to Terms of Service before granting full Internet access via a Wi-Fi hotspot).</p>
</div> </div>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#network_read_timeout" href="#">598 Network read timeout error</a> <a data-toggle="collapse" data-target="#network_read_timeout">598 Network read timeout error</a>
<div id="network_read_timeout" class="collapse"> <div id="network_read_timeout" class="collapse">
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>This status code is not specified in any RFCs, but is used by some HTTP proxies to signal a network read timeout behind the proxy to a client in front of the proxy.</p> <p>This status code is not specified in any RFCs, but is used by some HTTP proxies to signal a network read timeout behind the proxy to a client in front of the proxy.</p>
</div> </div>
</div> </div>
<div class="span4"> <div class="span4">
<a data-toggle="collapse" data-target="#network_connect_timeout" href="#">599 Network connect timeout error</a> <a data-toggle="collapse" data-target="#network_connect_timeout">599 Network connect timeout error</a>
<div id="network_connect_timeout" class="collapse"> <div id="network_connect_timeout" class="collapse">
<h3>Wikipedia</h3> <h3>Wikipedia</h3>
<p>This status code is not specified in any RFCs, but is used by some HTTP proxies to signal a network connect timeout behind the proxy to a client in front of the proxy.</p> <p>This status code is not specified in any RFCs, but is used by some HTTP proxies to signal a network connect timeout behind the proxy to a client in front of the proxy.</p>
@ -788,19 +828,17 @@
</div> </div>
<hr> <hr>
<footer> <footer>
<p> <p><a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />This work by <a xmlns:cc="https://creativecommons.org/ns#" href="https://www.restapitutorial.com/" property="cc:attributionName" rel="cc:attributionURL">RestApiTutorial.com</a> is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>
&copy;Pearson eCollege, 2012. All rights reserved.
</p>
</footer> </footer>
</div> <!-- /container --> </div> <!-- /container -->
<div class="navbar navbar-fixed-top"> <div class="navbar navbar-fixed-top">
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a>
<a class="brand" href="http://www.restapitutorial.com">REST API Tutorial</a> <a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
<div class="nav-collapse"> <div class="nav-collapse">
<ul class="nav"> <ul class="nav">
<li><a href="http://www.restapitutorial.com">Home</a></li> <li><a href="https://www.restapitutorial.com">Home</a></li>
<li class="dropdown" id="api-school"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials<b class="caret"></b></a> <li class="dropdown" id="api-school"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials<b class="caret"></b></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="lessons/whatisrest.html">What Is REST?</a></li> <li><a href="lessons/whatisrest.html">What Is REST?</a></li>
@ -821,7 +859,7 @@
================================================== --> ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/js/bootstrap.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/js/bootstrap.min.js"></script>
<a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://a248.e.akamai.net/camo.github.com/e6bef7a091f5f3138b8cd40bc3e114258dd68ddf/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub"></a> <a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://camo.githubusercontent.com/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a>
</body> </body>
</html> </html>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

BIN
images/banner1.odg Normal file

Binary file not shown.

BIN
images/banner1.xcf Normal file

Binary file not shown.

View File

@ -1,92 +1,128 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<!-- Google Analytics Content Experiment code -->
<script>function utmx_section(){}function utmx(){}(function(){var
k='59305729-0',d=document,l=d.location,c=d.cookie;
if(l.search.indexOf('utm_expid='+k)>0)return;
function f(n){if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.
indexOf(';',i);return escape(c.substring(i+n.length+1,j<0?c.
length:j))}}}var x=f('__utmx'),xx=f('__utmxx'),h=l.hash;d.write(
'<sc'+'ript src="'+'http'+(l.protocol=='https:'?'s://ssl':
'://www')+'.google-analytics.com/ga_exp.js?'+'utmxkey='+k+
'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime='+new Date().
valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+
'" type="text/javascript" charset="utf-8"><\/sc'+'ript>')})();
</script><script>utmx('url','A/B');</script>
<!-- End of Google Analytics Content Experiment code -->
<meta charset="utf-8"> <meta charset="utf-8">
<title>REST API Tutorial</title> <title>REST API Tutorial</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="The REST API Tutorial. Learn REST API best practices."> <meta name="description" content="The REST API Tutorial. Learn REST API best practices.">
<meta name="author" content="Todd Fredrich, Pearson eCollege"> <meta name="author" content="Todd Fredrich, Pearson eCollege">
<!-- Le styles --> <!-- Le styles -->
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap.min.css" rel="stylesheet"> <link href="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css" rel="stylesheet">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style type="text/css"> <style type="text/css">
body { body {
padding-top: 60px; padding-top: 60px;
padding-bottom: 40px; padding-bottom: 40px;
} }
.banner-container {
}
</style> </style>
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<script type="text/javascript"> <script type="text/javascript">
var _gaq = _gaq || []; var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31328878-1']); _gaq.push(['_setAccount', 'UA-31328878-1']);
_gaq.push(['_trackPageview']); _gaq.push(['_trackPageview']);
(function() { (function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})(); })();
</script> </script>
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '389059184866929');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=389059184866929&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="row">
<div class="span10 offset2 banner-container">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Rest API Tutorial Responsive -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-2093481943685202"
data-ad-slot="4845828438"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
<div class="row">
<div class="span2">
<ul class="nav nav-list">
<li class="active"><a href="https://www.restapitutorial.com">Home</a></li>
<ul class="nav nav-list">
<li><a href="lessons/whatisrest.html">What Is REST?</a></li>
<li><a href="lessons/restquicktips.html">REST Quick Tips</a></li>
<li><a href="lessons/httpmethods.html">HTTP Methods</a></li>
<li><a href="lessons/restfulresourcenaming.html">Resource Naming</a></li>
<li><a href="lessons/idempotency.html">Idempotence</a></li>
</ul>
</li>
<li><a href="httpstatuscodes.html">HTTP Status Codes</a></li>
<li><a href="resources.html">Resources</a></li>
</ul>
</div>
<!-- Main hero unit for a primary marketing message or call to action --> <!-- Main hero unit for a primary marketing message or call to action -->
<div class="span10">
<div class="hero-unit"> <div class="hero-unit">
<h1>Learn REST: A RESTful Tutorial</h1> <h1>Learn <abbr title="Representational State Transfer">REST</abbr>: A RESTful Tutorial</h1>
<p>Building restful web services, like other programming skills is <strong>part art, part science</strong>. As the Internet industry progresses, creating a REST API becomes more concrete, with emerging best practices. As RESTful Web services don't follow a prescribed standard except for HTTP, it's important to build your RESTful API in accordance with industry best practices to ease development and simplify client adoption.</p> <p><strong>Hey, Fellow REST API Designer!</strong></p>
<p>Presently, there aren't a lot of REST API guides to help the lonely developer. <a href="http://www.restapitutorial.com">RestApiTutorial.com</a> is dedicated to tracking REST API best practices and making resources available to enable quick reference and self education for the development crafts-person. We'll discuss both the art and science of creating REST Web services.</p> <p>Building RESTful web services, like other programming skills is <strong>part art, part science</strong>. As the Internet industry progresses, creating a REST API becomes more concrete with emerging best practices. As RESTful web services don't follow a prescribed standard except for HTTP, it's important to build your RESTful API in accordance with industry best practices to ease development and increase client adoption.</p>
<p>Jump in with <a href="lessons/whatisrest.html">What Is REST?</a>, an overview concepts and constraints of the RESTful architecture.</p> <p>Presently, there aren't a lot of REST API guides to help the lonely developer. <a href="https://www.restapitutorial.com">RestApiTutorial.com</a> is dedicated to tracking REST API best practices and making resources available to enable quick reference and self education for the development crafts-person. We'll discuss both the art and science of creating REST Web services.</p>
<p><a class="btn btn-primary btn-large" href="lessons/whatisrest.html">Get Started &raquo;</a></p> <p>&mdash;Todd Fredrich, <em>The REST API Tutor</em></p>
<p>Jump in with <a href="lessons/whatisrest.html">What Is REST?</a>, an overview of concepts and constraints of the RESTful architecture.</p>
<p><a class="btn btn-primary btn-large" href="lessons/whatisrest.html">Next &raquo;</a></p>
</div> </div>
<!-- <div class="row">
<div class="span3">
<a href="rest-api-overview.html"><img src="./img/restful-api-overview.jpg" alt="RESTful API Overview" height="200" width="200" /></a>
<h2>Get Started</h2>
<p>
What is REST? Discover what the six constraints are for creating a RESTful API.
</p>
</div>
<div class="span3">
<a href="rest-api-tips.html"><img src="./img/helpful-tips.jpg" alt="Helpful Tips" height="200" width="200" /></a>
<h2>Get Started</h2>
<p>
Get started quickly, creating your RESTful API quickly with these high-level, over-arching quick tips.
</p>
</div>
<div class="span3">
<a href="rest-api-topics.html"><img src="./img/advanced-topics.jpg" alt="Advanced Topics" width="200" height="200" /></a>
<h2>Get Better</h2>
<p>
Ready to dive deeper in the creating RESTful services? Discover the more esoteric concepts of REST APIs.
</p>
</div>
<div class="span3">
<a href="rest-api-converstations.html"><img src="./img/conversations.png" alt="Conversations" width="200" height="200" /></a>
<h2>Get Building</h2>
<p>Introducing RestExpress, a Java framework to get building RESTful services quickly.</p>
</div>
</div> -->
<hr> <hr>
<footer> <footer>
<p> <p><a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />This work by <a xmlns:cc="https://creativecommons.org/ns#" href="https://www.restapitutorial.com/" property="cc:attributionName" rel="cc:attributionURL">RestApiTutorial.com</a> is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>
&copy;Pearson eCollege, 2012. All rights reserved.
</p>
<p></p>
</footer> </footer>
</div>
</div> <!-- /row -->
</div> <!-- /container --> </div> <!-- /container -->
<div class="navbar navbar-fixed-top"> <div class="navbar navbar-fixed-top">
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a>
<a class="brand" href="http://www.restapitutorial.com">REST API Tutorial</a> <a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
<div class="nav-collapse"> <div class="nav-collapse">
<ul class="nav"> <ul class="nav">
<li class="active"><a href="http://www.restapitutorial.com">Home</a></li> <li class="active"><a href="https://www.restapitutorial.com">Home</a></li>
<li class="dropdown" id="api-school"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials<b class="caret"></b></a> <li class="dropdown" id="api-school"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials<b class="caret"></b></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="lessons/whatisrest.html">What Is REST?</a></li> <li><a href="lessons/whatisrest.html">What Is REST?</a></li>
@ -107,7 +143,7 @@
================================================== --> ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/js/bootstrap.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/js/bootstrap.min.js"></script>
<a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://a248.e.akamai.net/camo.github.com/e6bef7a091f5f3138b8cd40bc3e114258dd68ddf/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub"></a> <a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://camo.githubusercontent.com/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a>
</body> </body>
</html> </html>

View File

@ -7,34 +7,64 @@
<meta name="description" content="HTTP methods tutorial on how to use them for RESTful API or Web Service."> <meta name="description" content="HTTP methods tutorial on how to use them for RESTful API or Web Service.">
<meta name="author" content="Todd Fredrich, Pearson eCollege"> <meta name="author" content="Todd Fredrich, Pearson eCollege">
<!-- Le styles --> <!-- Le styles -->
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap.min.css" rel="stylesheet"> <link href="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css" rel="stylesheet">
<style type="text/css"> <style type="text/css">
body { body {
padding-top: 60px; padding-top: 60px;
padding-bottom: 40px; padding-bottom: 40px;
} }
</style> </style>
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script> <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--> <![endif]-->
<script type="text/javascript"> <script type="text/javascript">
var _gaq = _gaq || []; var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31328878-1']); _gaq.push(['_setAccount', 'UA-31328878-1']);
_gaq.push(['_trackPageview']); _gaq.push(['_trackPageview']);
(function() { (function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})(); })();
</script> </script>
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '389059184866929');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=389059184866929&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="row">
<div class="span12 banner-container">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Rest API Tutorial -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-2093481943685202"
data-ad-slot="4845828438"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
<div class="row"> <div class="row">
<div class="span8"> <div class="span8">
<h1>Using HTTP Methods for RESTful Services</h1> <h1>Using HTTP Methods for RESTful Services</h1>
@ -52,35 +82,46 @@
</div> </div>
<div class="row"> <div class="row">
<div class="span12"> <div class="span12">
<p>The HTTP verbs comprise a major portion of our “uniform interface” constraint and provide us the action counterpart to the noun-based resource. The primary or most-commonly-used HTTP verbs (or methods, as they are properly called) are POST, GET, PUT, and DELETE. These correspond to create, read, update, and delete (or CRUD) operations, respectively. There are a number of other verbs, too, but are utilized less frequently. Of those less-frequent methods, OPTIONS and HEAD are used more often than others.</p> <p>The HTTP verbs comprise a major portion of our “uniform interface” constraint and provide us the action counterpart to the noun-based resource. The primary or most-commonly-used HTTP verbs (or methods, as they are properly called) are POST, GET, PUT, PATCH, and DELETE. These correspond to create, read, update, and delete (or CRUD) operations, respectively. There are a number of other verbs, too, but are utilized less frequently. Of those less-frequent methods, OPTIONS and HEAD are used more often than others.</p>
<p>Below is a table summarizing recommended return values of the primary HTTP methods in combination with the resource URIs:</p> <p>Below is a table summarizing recommended return values of the primary HTTP methods in combination with the resource URIs:</p>
<table class="table table-striped table-bordered"> <table class="table table-striped table-bordered">
<thead> <thead>
<tr> <tr>
<th>HTTP Verb</th> <th>HTTP Verb</th>
<th>CRUD</th>
<th>Entire Collection (e.g. /customers)</th> <th>Entire Collection (e.g. /customers)</th>
<th>Specific Item (e.g. /customers/{id})</th> <th>Specific Item (e.g. /customers/{id})</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr>
<td>POST</td>
<td>Create</td>
<td>201 (Created), 'Location' header with link to /customers/{id} containing new ID.</td>
<td>404 (Not Found), 409 (Conflict) if resource already exists..</td>
</tr>
<tr> <tr>
<td>GET</td> <td>GET</td>
<td>Read/Retrieve</td>
<td>200 (OK), list of customers. Use pagination, sorting and filtering to navigate big lists.</td> <td>200 (OK), list of customers. Use pagination, sorting and filtering to navigate big lists.</td>
<td>200 (OK), single customer. 404 (Not Found), if ID not found or invalid.</td> <td>200 (OK), single customer. 404 (Not Found), if ID not found or invalid.</td>
</tr> </tr>
<tr> <tr>
<td>PUT</td> <td>PUT</td>
<td>404 (Not Found), unless you want to update/replace every resource in the entire collection.</td> <td>Update/Replace</td>
<td>405 (Method Not Allowed), unless you want to update/replace every resource in the entire collection.</td>
<td>200 (OK) or 204 (No Content). 404 (Not Found), if ID not found or invalid.</td> <td>200 (OK) or 204 (No Content). 404 (Not Found), if ID not found or invalid.</td>
</tr> </tr>
<tr> <tr>
<td>POST</td> <td>PATCH</td>
<td>201 (Created), 'Location' header with link to /customers/{id} containing new ID.</td> <td>Update/Modify</td>
<td>404 (Not Found).</td> <td>405 (Method Not Allowed), unless you want to modify the collection itself.</td>
<td>200 (OK) or 204 (No Content). 404 (Not Found), if ID not found or invalid.</td>
</tr> </tr>
<tr> <tr>
<td>DELETE</td> <td>DELETE</td>
<td>404 (Not Found), unless you want to delete the whole collection—not often desirable.</td> <td>Delete</td>
<td>405 (Method Not Allowed), unless you want to delete the whole collection—not often desirable.</td>
<td>200 (OK). 404 (Not Found), if ID not found or invalid.</td> <td>200 (OK). 404 (Not Found), if ID not found or invalid.</td>
</tr> </tr>
</tbody> </tbody>
@ -91,14 +132,25 @@
<div class="span12"> <div class="span12">
<p>Below is a more-detailed discussion of the main HTTP methods. Click on a tab for more information about the desired HTTP method.</p> <p>Below is a more-detailed discussion of the main HTTP methods. Click on a tab for more information about the desired HTTP method.</p>
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
<li class="active"><a href="#get" data-toggle="tab">GET</a></li> <li class="active"><a href="#post" data-toggle="tab">POST</a></li>
<li><a href="#get" data-toggle="tab">GET</a></li>
<li><a href="#put" data-toggle="tab">PUT</a></li> <li><a href="#put" data-toggle="tab">PUT</a></li>
<li><a href="#post" data-toggle="tab">POST</a></li> <li><a href="#patch" data-toggle="tab">PATCH</a></li>
<li><a href="#delete" data-toggle="tab">DELETE</a></li> <li><a href="#delete" data-toggle="tab">DELETE</a></li>
</ul> </ul>
<div id="methodTabContent" class="tab-content"> <div id="methodTabContent" class="tab-content">
<div class="tab-pane fade in active" id="get"> <div class="tab-pane fade in active" id="post">
<p>The HTTP GET method is used to retrieve (or read) a representation of a resource. In the “happy” (or non-error) path, GET returns a representation in XML or JSON and an HTTP response code of 200 (OK). In an error case, it most often returns a 404 (NOT FOUND) or 400 (BAD REQUEST).</p> <p>The POST verb is most-often utilized to **create** new resources. In particular, it's used to create subordinate resources. That is, subordinate to some other (e.g. parent) resource. In other words, when creating a new resource, POST to the parent and the service takes care of associating the new resource with the parent, assigning an ID (new resource URI), etc.</p>
<p>On successful creation, return HTTP status 201, returning a Location header with a link to the newly-created resource with the 201 HTTP status.</p>
<p>POST is neither safe nor idempotent. It is therefore recommended for non-idempotent resource requests. Making two identical POST requests will most-likely result in two resources containing the same information.</p>
<p><strong>Examples:</strong></p>
<ul>
<li><em>POST http://www.example.com/customers</em></li>
<li><em>POST http://www.example.com/customers/12345/orders</em></li>
</ul>
</div>
<div class="tab-pane fade" id="get">
<p>The HTTP GET method is used to **read** (or retrieve) a representation of a resource. In the “happy” (or non-error) path, GET returns a representation in XML or JSON and an HTTP response code of 200 (OK). In an error case, it most often returns a 404 (NOT FOUND) or 400 (BAD REQUEST).</p>
<p>According to the design of the HTTP specification, GET (along with HEAD) requests are used only to read data and not change it. Therefore, when used this way, they are considered safe. That is, they can be called without risk of data modification or corruption—calling it once has the same effect as calling it 10 times, or none at all. Additionally, GET (and HEAD) is idempotent, which means that making multiple identical requests ends up having the same result as a single request.</p> <p>According to the design of the HTTP specification, GET (along with HEAD) requests are used only to read data and not change it. Therefore, when used this way, they are considered safe. That is, they can be called without risk of data modification or corruption—calling it once has the same effect as calling it 10 times, or none at all. Additionally, GET (and HEAD) is idempotent, which means that making multiple identical requests ends up having the same result as a single request.</p>
<p>Do not expose unsafe operations via GET—it should never modify any resources on the server.</p> <p>Do not expose unsafe operations via GET—it should never modify any resources on the server.</p>
<p><strong>Examples:</strong></p> <p><strong>Examples:</strong></p>
@ -109,7 +161,7 @@
</ul> </ul>
</div> </div>
<div class="tab-pane fade" id="put"> <div class="tab-pane fade" id="put">
<p>PUT is most-often utilized for update capabilities, PUT-ing to a known resource URI with the request body containing the newly-updated representation of the original resource.</p> <p>PUT is most-often utilized for **update** capabilities, PUT-ing to a known resource URI with the request body containing the newly-updated representation of the original resource.</p>
<p>However, PUT can also be used to create a resource in the case where the resource ID is chosen by the client instead of by the server. In other words, if the PUT is to a URI that contains the value of a non-existent resource ID. Again, the request body contains a resource representation. Many feel this is convoluted and confusing. Consequently, this method of creation should be used sparingly, if at all.</p> <p>However, PUT can also be used to create a resource in the case where the resource ID is chosen by the client instead of by the server. In other words, if the PUT is to a URI that contains the value of a non-existent resource ID. Again, the request body contains a resource representation. Many feel this is convoluted and confusing. Consequently, this method of creation should be used sparingly, if at all.</p>
<p>Alternatively, use POST to create new resources and provide the client-defined ID in the body representation—presumably to a URI that doesn't include the ID of the resource (see POST below).</p> <p>Alternatively, use POST to create new resources and provide the client-defined ID in the body representation—presumably to a URI that doesn't include the ID of the resource (see POST below).</p>
<p>On successful update, return 200 (or 204 if not returning any content in the body) from a PUT. If using PUT for create, return HTTP status 201 on successful creation. A body in the response is optional—providing one consumes more bandwidth. It is not necessary to return a link via a Location header in the creation case since the client already set the resource ID.</p> <p>On successful update, return 200 (or 204 if not returning any content in the body) from a PUT. If using PUT for create, return HTTP status 201 on successful creation. A body in the response is optional—providing one consumes more bandwidth. It is not necessary to return a link via a Location header in the creation case since the client already set the resource ID.</p>
@ -122,21 +174,23 @@
<li><em>PUT http://www.example.com/buckets/secret_stuff</em></li> <li><em>PUT http://www.example.com/buckets/secret_stuff</em></li>
</ul> </ul>
</div> </div>
<div class="tab-pane fade" id="post"> <div class="tab-pane fade" id="patch">
<p>The POST verb is most-often utilized for creation of new resources. In particular, it's used to create subordinate resources. That is, subordinate to some other (e.g. parent) resource. In other words, when creating a new resource, POST to the parent and the service takes care of associating the new resource with the parent, assigning an ID (new resource URI), etc.</p> <p>PATCH is used for **modify** capabilities. The PATCH request only needs to contain the changes to the resource, not the complete resource.</p>
<p>On successful creation, return HTTP status 201, returning a Location header with a link to the newly-created resource with the 201 HTTP status.</p> <p>This resembles PUT, but the body contains a set of instructions describing how a resource currently residing on the server should be modified to produce a new version. This means that the PATCH body should not just be a modified part of the resource, but in some kind of patch language like JSON Patch or XML Patch.</p>
<p>POST is neither safe nor idempotent. It is therefore recommended for non-idempotent resource requests. Making two identical POST requests will most-likely result in two resources containing the same information.</p> <p>PATCH is neither safe nor idempotent. However, a PATCH request can be issued in such a way as to be idempotent, which also helps prevent bad outcomes from collisions between two PATCH requests on the same resource in a similar time frame. Collisions from multiple PATCH requests may be more dangerous than PUT collisions because some patch formats need to operate from a known base-point or else they will corrupt the resource. Clients using this kind of patch application should use a conditional request such that the request will fail if the resource has been updated since the client last accessed the resource. For example, the client can use a strong ETag in an If-Match header on the PATCH request.</p>
<p><strong>Examples:</strong></p> <p><strong>Examples:</strong></p>
<ul> <ul>
<li><em>POST http://www.example.com/customers</em></li> <li><em>PATCH http://www.example.com/customers/12345</em></li>
<li><em>POST http://www.example.com/customers/12345/orders</em></li> <li><em>PATCH http://www.example.com/customers/12345/orders/98765</em></li>
<li><em>PATCH http://www.example.com/buckets/secret_stuff</em></li>
</ul> </ul>
</div> </div>
<div class="tab-pane fade" id="delete"> <div class="tab-pane fade" id="delete">
<p>DELETE is pretty easy to understand. It is used to delete a resource identified by a URI. <p>DELETE is pretty easy to understand. It is used to **delete** a resource identified by a URI.
<p>On successful deletion, return HTTP status 200 (OK) along with a response body, perhaps the representation of the deleted item (often demands too much bandwidth), or a wrapped response (see Return Values below). Either that or return HTTP status 204 (NO CONTENT) with no response body. In other words, a 204 status with no body, or the JSEND-style response and HTTP status 200 are the recommended responses.</p> <p>On successful deletion, return HTTP status 200 (OK) along with a response body, perhaps the representation of the deleted item (often demands too much bandwidth), or a wrapped response (see Return Values below). Either that or return HTTP status 204 (NO CONTENT) with no response body. In other words, a 204 status with no body, or the JSEND-style response and HTTP status 200 are the recommended responses.</p>
<p>HTTP-spec-wise, DELETE operations are idempotent. If you DELETE a resource, it's removed. Repeatedly calling DELETE on that resource ends up the same: the resource is gone. If calling DELETE say, decrements a counter (within the resource), the DELETE call is no longer idempotent. As mentioned previously, usage statistics and measurements may be updated while still considering the service idempotent as long as no resource data is changed. Using POST for non-idempotent resource requests is recommended.</p> <p>HTTP-spec-wise, DELETE operations are idempotent. If you DELETE a resource, it's removed. Repeatedly calling DELETE on that resource ends up the same: the resource is gone. If calling DELETE say, decrements a counter (within the resource), the DELETE call is no longer idempotent. As mentioned previously, usage statistics and measurements may be updated while still considering the service idempotent as long as no resource data is changed. Using POST for non-idempotent resource requests is recommended.</p>
<p>There is a caveat about DELETE idempotence, however. Calling DELETE on a resource a second time will often return a 404 (NOT FOUND) since it was already removed and therefore is no longer findable. This makes DELETE operations no longer idempotent, but is an appropriate compromise if resources are removed from the database instead of being simply marked as deleted.</p> <p>There is a caveat about DELETE idempotence, however. Calling DELETE on a resource a second time will often return a 404 (NOT FOUND) since it was already removed and therefore is no longer findable. This, by some opinions, makes DELETE operations no longer idempotent, however, the end-state of the resource is the same. Returning a 404 is acceptable and communicates accurately the status of the call.</p>
<p><strong>Examples:</strong></p> <p><strong>Examples:</strong></p>
<ul> <ul>
<li><em>DELETE http://www.example.com/customers/12345</em></li> <li><em>DELETE http://www.example.com/customers/12345</em></li>
@ -149,16 +203,14 @@
</div> </div>
<hr> <hr>
<footer> <footer>
<p> <p><a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />This work by <a xmlns:cc="https://creativecommons.org/ns#" href="https://www.RestApiTutorial.com" property="cc:attributionName" rel="cc:attributionURL">RestApiTutorial.com</a> is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>
&copy;Pearson eCollege, 2012. All rights reserved.
</p>
</footer> </footer>
</div> <!-- /container --> </div> <!-- /container -->
<div class="navbar navbar-fixed-top"> <div class="navbar navbar-fixed-top">
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a>
<a class="brand" href="http://www.restapitutorial.com">REST API Tutorial</a> <a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
<div class="nav-collapse"> <div class="nav-collapse">
<ul class="nav"> <ul class="nav">
<li><a href="../index.html">Home</a></li> <li><a href="../index.html">Home</a></li>
@ -182,7 +234,7 @@
================================================== --> ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/js/bootstrap.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/js/bootstrap.min.js"></script>
<a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://a248.e.akamai.net/camo.github.com/e6bef7a091f5f3138b8cd40bc3e114258dd68ddf/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub"></a> <a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://camo.githubusercontent.com/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a>
</body> </body>
</html> </html>

View File

@ -7,34 +7,64 @@
<meta name="description" content="Idempotency or Idempotence, definition in a non-academic way, specifically in REST APIs"> <meta name="description" content="Idempotency or Idempotence, definition in a non-academic way, specifically in REST APIs">
<meta name="author" content="Todd Fredrich, Pearson eCollege"> <meta name="author" content="Todd Fredrich, Pearson eCollege">
<!-- Le styles --> <!-- Le styles -->
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap.min.css" rel="stylesheet"> <link href="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css" rel="stylesheet">
<style type="text/css"> <style type="text/css">
body { body {
padding-top: 60px; padding-top: 60px;
padding-bottom: 40px; padding-bottom: 40px;
} }
</style> </style>
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script> <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--> <![endif]-->
<script type="text/javascript"> <script type="text/javascript">
var _gaq = _gaq || []; var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31328878-1']); _gaq.push(['_setAccount', 'UA-31328878-1']);
_gaq.push(['_trackPageview']); _gaq.push(['_trackPageview']);
(function() { (function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})(); })();
</script> </script>
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '389059184866929');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=389059184866929&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="row">
<div class="span12 banner-container">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Rest API Tutorial -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-2093481943685202"
data-ad-slot="4845828438"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
<div class="row"> <div class="row">
<div class="span7"> <div class="span7">
<h1>What Is Idempotence?</h1> <h1>What Is Idempotence?</h1>
@ -57,7 +87,7 @@
</div> </div>
<div id="video1" class="row collapse in"> <div id="video1" class="row collapse in">
<div class="span12"> <div class="span12">
<iframe width="853" height="480" src="http://www.youtube.com/embed/6dVNdFwqeKs" frameborder="0" allowfullscreen></iframe> <iframe width="853" height="480" src="https://www.youtube.com/embed/6dVNdFwqeKs" frameborder="0" allowfullscreen></iframe>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
@ -66,34 +96,21 @@
</div> </div>
<div class="span12"> <div class="span12">
<p>Idempotence is a funky word that often hooks people. Idempotence is sometimes a confusing concept, at least from the academic definition.</p> <p>Idempotence is a funky word that often hooks people. Idempotence is sometimes a confusing concept, at least from the academic definition.</p>
<p>From a RESTful service standpoint, for an operation (or service call) to be idempotent, clients can make that same call repeatedly while producing the same result—operating much like a “setter” method in a programming language. In other words, making multiple identical requests has the same effect as making a single request. Note that while idempotent operations produce the same result on the server (side effects), the response itself may not be the same (e.g. a resource's state may change between requests).</p> <p>From a RESTful service standpoint, for an operation (or service call) to be idempotent, clients can make that same call repeatedly while producing the same result. In other words, making multiple identical requests has the same effect as making a single request. Note that while idempotent operations produce the same result on the server (no side effects), the response itself may not be the same (e.g. a resource's state may change between requests).</p>
<p>The PUT and DELETE methods are defined to be idempotent. However, there is a caveat on DELETE. The problem with DELETE, which if successful would normally return a 200 (OK) or 204 (No Content), will often return a 404 (Not Found) on subsequent calls, unless the service is configured to "mark" resources for deletion without actually deleting them. However, when the service actually deletes the resource, the next call will not find the resource to delete it and return a 404. However, the state on the server is the same after each DELETE call, but the response is different.</p> <p>The PUT and DELETE methods are defined to be idempotent. However, there is a caveat on DELETE. The problem with DELETE, which if successful would normally return a 200 (OK) or 204 (No Content), will often return a 404 (Not Found) on subsequent calls, unless the service is configured to "mark" resources for deletion without actually deleting them. However, when the service actually deletes the resource, the next call will not find the resource to delete it and return a 404. However, the state on the server is the same after each DELETE call, but the response is different.</p>
<p>GET, HEAD, OPTIONS and TRACE methods are defined as safe, which makes them idempotent also. Read the section on safety below.</p> <p>GET, HEAD, OPTIONS and TRACE methods are defined as safe, meaning they are only intended for retrieving data. This makes them idempotent as well since multiple, identical requests will behave the same.</p>
</div>
</div>
<div class="row">
<div class="span12">
<h2>Safetey</h2>
</div>
<div class="span12">
<p>Idempotence is a funky word that often hooks people. Idempotence is sometimes a confusing concept, at least from the academic definition.</p>
<p>From a RESTful service standpoint, for an operation (or service call) to be idempotent, clients can make that same call repeatedly while producing the same result—operating much like a “setter” method in a programming language. In other words, making multiple identical requests has the same effect as making a single request. Note that while idempotent operations produce the same result on the server (side effects), the response itself may not be the same (e.g. a resource's state may change between requests).</p>
<p>The PUT and DELETE methods are defined to be idempotent. However, there is a caveat on DELETE. The problem with DELETE, which if successful would normally return a 200 (OK) or 204 (No Content), will often return a 404 (Not Found) on subsequent calls, unless the service is configured to "mark" resources for deletion without actually deleting them. However, when the service actually deletes the resource, the next call will not find the resource to delete it and return a 404. However, the state on the server is the same after each DELETE call, but the response is different.</p>
<p>GET, HEAD, OPTIONS and TRACE methods are defined as safe, which makes them idempotent also. Read the section on safety below.</p>
</div> </div>
</div> </div>
<hr> <hr>
<footer> <footer>
<p> <p><a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />This work by <a xmlns:cc="https://creativecommons.org/ns#" href="https://www.restapitutorial.com/" property="cc:attributionName" rel="cc:attributionURL">RestApiTutorial.com</a> is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>
&copy;Pearson eCollege, 2012-2013. All rights reserved.
</p>
</footer> </footer>
</div> <!-- /container --> </div> <!-- /container -->
<div class="navbar navbar-fixed-top"> <div class="navbar navbar-fixed-top">
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a>
<a class="brand" href="http://www.restapitutorial.com">REST API Tutorial</a> <a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
<div class="nav-collapse"> <div class="nav-collapse">
<ul class="nav"> <ul class="nav">
<li><a href="../index.html">Home</a></li> <li><a href="../index.html">Home</a></li>
@ -117,7 +134,7 @@
================================================== --> ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/js/bootstrap.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/js/bootstrap.min.js"></script>
<a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://a248.e.akamai.net/camo.github.com/e6bef7a091f5f3138b8cd40bc3e114258dd68ddf/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub"></a> <a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://camo.githubusercontent.com/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a>
</body> </body>
</html> </html>

View File

@ -7,34 +7,64 @@
<meta name="description" content="Naming Tutorial: RESTful services are resource-based. How do you create those noun-based resource names? Here's how..."> <meta name="description" content="Naming Tutorial: RESTful services are resource-based. How do you create those noun-based resource names? Here's how...">
<meta name="author" content="Todd Fredrich, Pearson eCollege"> <meta name="author" content="Todd Fredrich, Pearson eCollege">
<!-- Le styles --> <!-- Le styles -->
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap.min.css" rel="stylesheet"> <link href="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css" rel="stylesheet">
<style type="text/css"> <style type="text/css">
body { body {
padding-top: 60px; padding-top: 60px;
padding-bottom: 40px; padding-bottom: 40px;
} }
</style> </style>
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script> <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--> <![endif]-->
<script type="text/javascript"> <script type="text/javascript">
var _gaq = _gaq || []; var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31328878-1']); _gaq.push(['_setAccount', 'UA-31328878-1']);
_gaq.push(['_trackPageview']); _gaq.push(['_trackPageview']);
(function() { (function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})(); })();
</script> </script>
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '389059184866929');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=389059184866929&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="row">
<div class="span12 banner-container">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Rest API Tutorial -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-2093481943685202"
data-ad-slot="4845828438"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
<div class="row"> <div class="row">
<div class="span8"> <div class="span8">
<h1>Resource Naming</h1> <h1>Resource Naming</h1>
@ -53,7 +83,7 @@
<div class="row"> <div class="row">
<div class="span12"> <div class="span12">
<p>In addition to utilizing the HTTP verbs appropriately, resource naming is arguably the most debated and most important concept to grasp when creating an understandable, easily leveraged Web service API. When resources are named well, an API is intuitive and easy to use. Done poorly, that same API can feel klutzy and be difficult to use and understand. Below are a few tips to get you going when creating the resource URIs for your new API.</p> <p>In addition to utilizing the HTTP verbs appropriately, resource naming is arguably the most debated and most important concept to grasp when creating an understandable, easily leveraged Web service API. When resources are named well, an API is intuitive and easy to use. Done poorly, that same API can feel klutzy and be difficult to use and understand. Below are a few tips to get you going when creating the resource URIs for your new API.</p>
<p>Essentially, a RESTFul API ends up being simply a collection of URIs, HTTP calls to those URIs and some JSON and/or XML representations of resources, many of which will contain relational links. The RESTful principal of addressability is covered by the URIs. Each resource has its own address or URI—every interesting piece of information the server can provide is exposed as a resource. The constraint of uniform interface is partially addressed by the combination of URIs and HTTP verbs, and using them in line with the standards and conventions.</p> <p>Essentially, a RESTful API ends up being simply a collection of URIs, HTTP calls to those URIs and some JSON and/or XML representations of resources, many of which will contain relational links. The RESTful principal of addressability is covered by the URIs. Each resource has its own address or URI—every interesting piece of information the server can provide is exposed as a resource. The constraint of uniform interface is partially addressed by the combination of URIs and HTTP verbs, and using them in line with the standards and conventions.</p>
<p>In deciding what resources are within your system, name them as nouns as opposed to verbs or actions. In other words, a RESTful URI should refer to a resource that is a thing instead of referring to an action. Nouns have properties as verbs do not, just another distinguishing factor.</p> <p>In deciding what resources are within your system, name them as nouns as opposed to verbs or actions. In other words, a RESTful URI should refer to a resource that is a thing instead of referring to an action. Nouns have properties as verbs do not, just another distinguishing factor.</p>
<p>Some example resources are:</p> <p>Some example resources are:</p>
<ul> <ul>
@ -102,8 +132,8 @@
<p>By now you can see how the hierarchy concept works. There aren't any hard and fast rules, only make sure the imposed structure makes sense to consumers of your services. As with everything in the craft of Software Development, naming is critical to success.</p> <p>By now you can see how the hierarchy concept works. There aren't any hard and fast rules, only make sure the imposed structure makes sense to consumers of your services. As with everything in the craft of Software Development, naming is critical to success.</p>
<p>Look at some widely used APIs to get the hang of this and leverage the intuition of your teammates to refine your API resource URIs. Some example APIs are:</p> <p>Look at some widely used APIs to get the hang of this and leverage the intuition of your teammates to refine your API resource URIs. Some example APIs are:</p>
<ul> <ul>
<li>Twitter: https://dev.twitter.com/docs/api</li> <li>Twitter: https://developer.twitter.com/en/docs/api-reference-index</li>
<li>Facebook: http://developers.facebook.com/docs/reference/api/</li> <li>Facebook: https://developers.facebook.com/docs/reference/api/</li>
<li>LinkedIn: https://developer.linkedin.com/apis</li> <li>LinkedIn: https://developer.linkedin.com/apis</li>
</ul> </ul>
</div> </div>
@ -146,16 +176,14 @@
</div> </div>
<hr> <hr>
<footer> <footer>
<p> <p><a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />This work by <a xmlns:cc="https://creativecommons.org/ns#" href="https://www.restapitutorial.com/" property="cc:attributionName" rel="cc:attributionURL">RestApiTutorial.com</a> is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>
&copy;Pearson eCollege, 2012. All rights reserved.
</p>
</footer> </footer>
</div> <!-- /container --> </div> <!-- /container -->
<div class="navbar navbar-fixed-top"> <div class="navbar navbar-fixed-top">
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a>
<a class="brand" href="http://www.restapitutorial.com">REST API Tutorial</a> <a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
<div class="nav-collapse"> <div class="nav-collapse">
<ul class="nav"> <ul class="nav">
<li><a href="../index.html">Home</a></li> <li><a href="../index.html">Home</a></li>
@ -179,7 +207,7 @@
================================================== --> ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/js/bootstrap.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/js/bootstrap.min.js"></script>
<a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://a248.e.akamai.net/camo.github.com/e6bef7a091f5f3138b8cd40bc3e114258dd68ddf/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub"></a> <a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://camo.githubusercontent.com/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a>
</body> </body>
</html> </html>

View File

@ -7,34 +7,64 @@
<meta name="description" content="RESTful API or Web Service Quick Tips. Want to learn the high points of creating a REST API? Here's the Web Services in 60-seconds version."> <meta name="description" content="RESTful API or Web Service Quick Tips. Want to learn the high points of creating a REST API? Here's the Web Services in 60-seconds version.">
<meta name="author" content="Todd Fredrich, Pearson eCollege"> <meta name="author" content="Todd Fredrich, Pearson eCollege">
<!-- Le styles --> <!-- Le styles -->
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap.min.css" rel="stylesheet"> <link href="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css" rel="stylesheet">
<style type="text/css"> <style type="text/css">
body { body {
padding-top: 60px; padding-top: 60px;
padding-bottom: 40px; padding-bottom: 40px;
} }
</style> </style>
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script> <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--> <![endif]-->
<script type="text/javascript"> <script type="text/javascript">
var _gaq = _gaq || []; var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31328878-1']); _gaq.push(['_setAccount', 'UA-31328878-1']);
_gaq.push(['_trackPageview']); _gaq.push(['_trackPageview']);
(function() { (function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})(); })();
</script> </script>
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '389059184866929');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=389059184866929&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="row">
<div class="span12 banner-container">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Rest API Tutorial -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-2093481943685202"
data-ad-slot="4845828438"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
<div class="row"> <div class="row">
<div class="span8"> <div class="span8">
<h1>REST API Quick Tips</h1> <h1>REST API Quick Tips</h1>
@ -53,19 +83,23 @@
<div class="row"> <div class="row">
<div class="span12"> <div class="span12">
<p>Whether it's technically RESTful or not (according to the six constraints mentioned previously), here are a few recommended REST-like concepts. These six quick tips will result in better, more usable services.</p> <p>Whether it's technically RESTful or not (according to the six constraints mentioned previously), here are a few recommended REST-like concepts. These six quick tips will result in better, more usable services.</p>
<h2>Use HTTP Verbs to Mean Something</h2> <h2>Use HTTP Verbs to Make Your Requests Mean Something</h2>
<p>API consumers are capable of sending GET, POST, PUT, and DELETE verbs, and these verbs greatly enhance the clarity of what a given request does. Also, GET requests must not change any underlying resource data. Measurements and tracking may still occur, which updates data, but not resource data identified by the URI.</p> <p>API consumers are capable of sending GET, POST, PUT, and DELETE verbs, which greatly enhance the clarity of a given request.</p>
<p>Generally, the four primary HTTP verb are used as follows: <p>Generally, the four primary HTTP verbs are used as follows:
<dl> <dl>
<dt>GET</dt> <dt>GET</dt>
<dd>Read a specific resource (by an identifier) or a collection of resources.</dd> <dd>Read a specific resource (by an identifier) or a collection of resources.</dd>
<dt>PUT</dt> <dt>PUT</dt>
<dd>Update a specific resource (by an identifier) or a collection of resources. Can also be used to create a specific resource if the resource identifier is know before-hand.</dd> <dd>Update a specific resource (by an identifier) or a collection of resources. Can also be used to create a specific resource if the resource identifier is known before-hand.</dd>
<dt>DELETE</dt> <dt>DELETE</dt>
<dd>Remove/delete a specific resource by an identifier.</dd> <dd>Remove/delete a specific resource by an identifier.</dd>
<dt>POST</dt> <dt>POST</dt>
<dd>Create a new resource. Also a catch-all verb for operations that don't fit into the other categories.</dd> <dd>Create a new resource. Also a catch-all verb for operations that don't fit into the other categories.</dd>
</dl> </dl>
</p>
<h3>Note</h3>
<p>
GET requests must not change any underlying resource data. Measurements and tracking which update data may still occur, but the resource data identified by the URI should not change.
</p> </p>
<h2>Provide Sensible Resource Names</h2> <h2>Provide Sensible Resource Names</h2>
<p>Producing a great API is 80% art and 20% science. Creating a URL hierarchy representing sensible resources is the art part. Having sensible resource names (which are just URL paths, such as /customers/12345/orders) improves the clarity of what a given request does.</p> <p>Producing a great API is 80% art and 20% science. Creating a URL hierarchy representing sensible resources is the art part. Having sensible resource names (which are just URL paths, such as /customers/12345/orders) improves the clarity of what a given request does.</p>
@ -76,30 +110,30 @@
<ul><li><strong>Good:</strong> /users/12345</li><li><strong>Poor:</strong> /api?type=user&amp;id=23</li></ul></li> <ul><li><strong>Good:</strong> /users/12345</li><li><strong>Poor:</strong> /api?type=user&amp;id=23</li></ul></li>
<li>Leverage the hierarchical nature of the URL to imply structure.</li> <li>Leverage the hierarchical nature of the URL to imply structure.</li>
<li>Design for your clients, not for your data.</li> <li>Design for your clients, not for your data.</li>
<li>Resource names should be nouns. Avoid verbs as resource names. It makes things more clear. Use the HTTP methods to specify the verb portion of the request.</li> <li>Resource names should be nouns. Avoid verbs as resource names, to improve clarity. Use the HTTP methods to specify the verb portion of the request.</li>
<li>Use plurals in URL segments to keep your API URIs consistent across all HTTP methods, using the collection metaphor. <li>Use plurals in URL segments to keep your API URIs consistent across all HTTP methods, using the collection metaphor.
<ul><li><strong>Recommended:</strong> /customers/33245/orders/8769/lineitems/1</li><li><strong>Not:</strong> /customer/33245/order/8769/lineitem/1</li></ul></li> <ul><li><strong>Recommended:</strong> /customers/33245/orders/8769/lineitems/1</li><li><strong>Not:</strong> /customer/33245/order/8769/lineitem/1</li></ul></li>
<li>Avoid using collection verbage in URLs. For example 'customer_list' as a resource. Use pluralization to indicate the collection metaphor (e.g. customers vs. customer_list).</li> <li>Avoid using collection verbiage in URLs. For example 'customer_list' as a resource. Use pluralization to indicate the collection metaphor (e.g. customers vs. customer_list).</li>
<li>Use lower-case in URL segments, separating words with underscores ('_') or hyphens ('-'). Some servers ignore case so it's best to be clear.</li> <li>Use lower-case in URL segments, separating words with underscores ('_') or hyphens ('-'). Some servers ignore case so it's best to be clear.</li>
<li>Keep URLs as short as possible, with as few segments as makes sense.</li> <li>Keep URLs as short as possible, with as few segments as makes sense.</li>
</ul> </ul>
</p> </p>
<h2>Use HTTP Response Codes to Indicate Status</h2> <h2>Use HTTP Response Codes to Indicate Status</h2>
<p>Response status codes are part of the HTTP specification. There are quite a number of them to address the most common situations. In the spirit of having our RESTful services embrace the HTTP specification, our Web APIs should return relevant HTTP status codes. For example, when a resource is successfully created (e.g. from a POST request), the API should return HTTP status code 201. A list of valid <a href="http://www.restapitutorial.com/httpstatuscodes.html">HTTP status codes</a> is available <a href="http://www.restapitutorial.com/httpstatuscodes.html">here</a> which lists detailed descriptions of each.</p> <p>Response status codes are part of the HTTP specification. There are quite a number of them to address the most common situations. In the spirit of having our RESTful services embrace the HTTP specification, our Web APIs should return relevant HTTP status codes. For example, when a resource is successfully created (e.g. from a POST request), the API should return HTTP status code 201. A list of valid <a href="https://www.restapitutorial.com/httpstatuscodes.html">HTTP status codes</a> is available <a href="https://www.restapitutorial.com/httpstatuscodes.html">here</a> which lists detailed descriptions of each.</p>
<p>Suggested usages for the &quot;Top 10&quot; HTTP Response Status Codes are as follows: <p>Suggested usages for the &quot;Top 10&quot; HTTP Response Status Codes are as follows:
<dl> <dl>
<dt>200 OK</dt> <dt>200 OK</dt>
<dd>General status code. Most common code used to indicate success.</dd> <dd>General success status code. This is the most common code. Used to indicate success.</dd>
<dt>201 CREATED</dt> <dt>201 CREATED</dt>
<dd>Successful creation occurred (via either POST or PUT). Set the Location header to contain a link to the newly-created resource (on POST). Response body content may or may not be present.</dd> <dd>Successful creation occurred (via either POST or PUT). Set the Location header to contain a link to the newly-created resource (on POST). Response body content may or may not be present.</dd>
<dt>204 NO CONTENT</dt> <dt>204 NO CONTENT</dt>
<dd>Indicates success but nothing is in the response body, often used for DELETE and UPDATE operations.</dd> <dd>Indicates success but nothing is in the response body, often used for DELETE and PUT operations.</dd>
<dt>400 BAD REQUEST</dt> <dt>400 BAD REQUEST</dt>
<dd>General error when fulfilling the request would cause an invalid state. Domain validation errors, missing data, etc. are some examples.</dd> <dd>General error for when fulfilling the request would cause an invalid state. Domain validation errors, missing data, etc. are some examples.</dd>
<dt>401 UNAUTHORIZED</dt> <dt>401 UNAUTHORIZED</dt>
<dd>Error code response for missing or invalid authentication token.</dd> <dd>Error code response for missing or invalid authentication token.</dd>
<dt>403 FORBIDDEN</dt> <dt>403 FORBIDDEN</dt>
<dd>Error code for user not authorized to perform the operation or the resource is unavailable for some reason (e.g. time constraints, etc.).</dd> <dd>Error code for when the user is not authorized to perform the operation or the resource is unavailable for some reason (e.g. time constraints, etc.).</dd>
<dt>404 NOT FOUND</dt> <dt>404 NOT FOUND</dt>
<dd>Used when the requested resource is not found, whether it doesn't exist or if there was a 401 or 403 that, for security reasons, the service wants to mask.</dd> <dd>Used when the requested resource is not found, whether it doesn't exist or if there was a 401 or 403 that, for security reasons, the service wants to mask.</dd>
<dt>405 METHOD NOT ALLOWED</dt> <dt>405 METHOD NOT ALLOWED</dt>
@ -111,18 +145,18 @@
</dl> </dl>
</p> </p>
<h2>Offer Both JSON and XML</h2> <h2>Offer Both JSON and XML</h2>
<p>Favor JSON support unless you're in a highly-standardize and regulated industry that requires XML, Schema validation and namespaces. And unless the costs of offering both JSON and XML are staggering, however, offer them both. Ideally, let consumers switch between using the HTTP Accept header, or by just changing an extension from .xml to .json on the URL.</p> <p>Favor JSON support unless you're in a highly-standardized and regulated industry that requires XML, schema validation and namespaces, and offer both JSON and XML unless the costs are staggering. Ideally, let consumers switch between formats using the HTTP Accept header, or by just changing an extension from .xml to .json on the URL.</p>
<p>Be warned though, as soon as we start talking about XML support, we start talking about schemas for validation, namespaces, etc. Unless required by your industry, avoid supporting all that complexity initially, if ever. JSON is designed to be simple, terse and functional. Create your XML to look like that if you can.</p> <p>Be aware that as soon as we start talking about XML support, we start talking about schemas for validation, namespaces, etc. Unless required by your industry, avoid supporting all that complexity initially, if ever. JSON is designed to be simple, terse and functional. Make your XML look like that if you can.</p>
<p>In other words, make the XML that is returned more JSON-like: simple and easy to read, without the schema and namespace details present&mdash;just data and links. If it ends up being more complex than this, the cost of XML will be staggering. In my experience nobody uses the XML responses anyway over the last several years. It's just too expensive to consume.</p> <p>In other words, make the XML that is returned more JSON-like &mdash; simple and easy to read, without the schema and namespace details present, just data and links. If it ends up being more complex than this, the cost of XML will be staggering. In my experience no one has used XML responses anyway for the last several years, it's just too expensive to consume.</p>
<p>Note that <a href="http://json-schema.org/">JSON-Schema</a> offers schema-style validation capabilities, if you need that sort of thing.</p> <p>Note that <a href="https://json-schema.org/">JSON-Schema</a> offers schema-style validation capabilities, if you need that sort of thing.</p>
<h2>Create Fine-Grained Resources</h2> <h2>Create Fine-Grained Resources</h2>
<p>When starting out, it's much easier to create APIs that mimic the underlying application domain or database architecture of your system. Eventually, you'll want aggregate services&mdash;services that utilize multiple underlying resources to reduce chattiness. But it's much easier to create larger resources later from individual resources than it is to create fine-grained or individual resources from larger aggregates. Make it easy on yourself and start with small, easily defined resources, providing CRUD functionality on those. You can create those use-case-oriented, chattiness-reducing resources later.</p> <p>When starting out, it's best to create APIs that mimic the underlying application domain or database architecture of your system. Eventually, you'll want aggregate services that utilize multiple underlying resources to reduce chattiness. However, it's much easier to create larger resources later from individual resources than it is to create fine-grained or individual resources from larger aggregates. Make it easy on yourself and start with small, easily defined resources, providing CRUD functionality on those. You can create those use-case-oriented, chattiness-reducing resources later.</p>
<h2>Consider Connectedness</h2> <h2>Consider Connectedness</h2>
<p>One of the principles of REST is connectedness—via hypermedia links (search HATEOAS). While services are still useful without them, APIs become more self-descriptive and discoverable when links are returned in the response. At the very least, a 'self' link reference informs clients how the data was or can be retrieved. Additionally, utilize the HTTP Location header to contain a link on resource creation via POST (or PUT). For collections returned in a response that support pagination, 'first', 'last', 'next' and 'prev' links at a minimum are very helpful.</p> <p>One of the principles of REST is connectedness—via hypermedia links (search HATEOAS). While services are still useful without them, APIs become more self-descriptive and discoverable when links are returned in the response. At the very least, a 'self' link reference informs clients how the data was or can be retrieved. Additionally, utilize the HTTP Location header to contain a link on resource creation via POST (or PUT). For collections returned in a response that support pagination, 'first', 'last', 'next' and 'prev' links at a minimum are very helpful.</p>
<p>Regarding linking formats, there are many. The HTTP Web Linking Specification (<a href="http://tools.ietf.org/search/rfc5988">RFC5988</a>) explains a link as follows: <p>Regarding linking formats, there are many. The HTTP Web Linking Specification (<a href="https://tools.ietf.org/search/rfc5988">RFC5988</a>) explains a link as follows:
<blockquote>a link is a typed connection between two <blockquote>a link is a typed connection between two
resources that are identified by Internationalised Resource resources that are identified by Internationalised Resource
Identifiers (IRIs) [<a href="http://tools.ietf.org/search/rfc3987">RFC3987</a>], and is comprised of: Identifiers (IRIs) [<a href="https://tools.ietf.org/search/rfc3987">RFC3987</a>], and is comprised of:
<ul> <ul>
<li>A context IRI,</li> <li>A context IRI,</li>
<li>a link relation type</li> <li>a link relation type</li>
@ -132,21 +166,19 @@
A link can be viewed as a statement of the form &quot;{context IRI} has a A link can be viewed as a statement of the form &quot;{context IRI} has a
{relation type} resource at {target IRI}, which has {target {relation type} resource at {target IRI}, which has {target
attributes}.&quot;</blockquote></p> attributes}.&quot;</blockquote></p>
<p>At the very least, place links in the HTTP Link header as recommended in the specification. Or embrace a JSON representation of this HTTP link style (such as Atom-style links, see: <a href="http://tools.ietf.org/search/rfc4287#section-4.2.7">RFC4287</a>) in your JSON representations. Later, you can layer in more complex linking styles such as <a href="http://stateless.co/hal_specification.html">HAL+JSON</a>, <a href="https://github.com/kevinswiber/siren">Siren</a>, <a href="http://amundsen.com/media-types/collection/">Collection+JSON</a>, and/or <a href="http://json-ld.org/">JSON-LD</a>, etc. as your REST APIs become more mature.</p> <p>At the very least, place links in the HTTP Link header as recommended in the specification, or embrace a JSON representation of this HTTP link style (such as Atom-style links, see: <a href="https://tools.ietf.org/search/rfc4287#section-4.2.7">RFC4287</a>) in your JSON representations. Later, you can layer in more complex linking styles such as <a href="https://stateless.co/hal_specification.html">HAL+JSON</a>, <a href="https://github.com/kevinswiber/siren">Siren</a>, <a href="https://amundsen.com/media-types/collection/">Collection+JSON</a>, and/or <a href="https://json-ld.org/">JSON-LD</a>, etc. as your REST APIs become more mature.</p>
</div> </div>
</div> </div>
<hr> <hr>
<footer> <footer>
<p> <p><a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />This work by <a xmlns:cc="https://creativecommons.org/ns#" href="https://www.restapitutorial.com/" property="cc:attributionName" rel="cc:attributionURL">RestApiTutorial.com</a> is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>
&copy;Pearson eCollege, 2012. All rights reserved.
</p>
</footer> </footer>
</div> <!-- /container --> </div> <!-- /container -->
<div class="navbar navbar-fixed-top"> <div class="navbar navbar-fixed-top">
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a>
<a class="brand" href="http://www.restapitutorial.com">REST API Tutorial</a> <a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
<div class="nav-collapse"> <div class="nav-collapse">
<ul class="nav"> <ul class="nav">
<li><a href="../index.html">Home</a></li> <li><a href="../index.html">Home</a></li>
@ -170,7 +202,7 @@
================================================== --> ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/js/bootstrap.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/js/bootstrap.min.js"></script>
<a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://a248.e.akamai.net/camo.github.com/e6bef7a091f5f3138b8cd40bc3e114258dd68ddf/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub"></a> <a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://camo.githubusercontent.com/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a>
</body> </body>
</html> </html>

View File

@ -7,36 +7,66 @@
<meta name="description" content="A tutorial on the six primary REST constraints as explained by Roy Fielding"> <meta name="description" content="A tutorial on the six primary REST constraints as explained by Roy Fielding">
<meta name="author" content="Todd Fredrich, Pearson eCollege"> <meta name="author" content="Todd Fredrich, Pearson eCollege">
<!-- Le styles --> <!-- Le styles -->
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap.min.css" rel="stylesheet"> <link href="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css" rel="stylesheet">
<style type="text/css"> <style type="text/css">
body { body {
padding-top: 60px; padding-top: 60px;
padding-bottom: 40px; padding-bottom: 40px;
} }
</style> </style>
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script> <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--> <![endif]-->
<script type="text/javascript"> <script type="text/javascript">
var _gaq = _gaq || []; var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31328878-1']); _gaq.push(['_setAccount', 'UA-31328878-1']);
_gaq.push(['_trackPageview']); _gaq.push(['_trackPageview']);
(function() { (function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})(); })();
</script> </script>
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '389059184866929');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=389059184866929&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="row">
<div class="span12 banner-container">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Rest API Tutorial -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-2093481943685202"
data-ad-slot="4845828438"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
<div class="row"> <div class="row">
<div class="span8"> <div class="span8">
<h1>What Is REST?</h1> <h1>What Is REST?</h1>
</div> </div>
<div class="span4"> <div class="span4">
@ -57,12 +87,12 @@
</div> </div>
<div id="video1" class="row collapse in"> <div id="video1" class="row collapse in">
<div class="span12"> <div class="span12">
<iframe width="853" height="480" src="http://www.youtube.com/embed/llpr5924N7E" frameborder="0" allowfullscreen></iframe> <iframe width="853" height="480" src="https://www.youtube.com/embed/llpr5924N7E" frameborder="0" allowfullscreen></iframe>
</div> </div>
</div> </div>
<div class="row"> <div class="row">
<div class="span12"> <div class="span12">
<p>The REST architectural style describes six constraints. These constraints, applied to the architecture, were originally communicated by Roy Fielding in his doctoral dissertation (see <a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm" target="_blank">http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm</a>) and defines the basis of RESTful-style.</p> <p>The REST architectural style describes six constraints. These constraints, applied to the architecture, were originally communicated by Roy Fielding in his doctoral dissertation (see <a href="https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm" target="_blank">https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm</a>) and defines the basis of RESTful-style.</p>
<p><strong>The six constraints are: (click the constraint to read more)</strong></p> <p><strong>The six constraints are: (click the constraint to read more)</strong></p>
<ul id="constraint-accordian"> <ul id="constraint-accordian">
<li><a data-toggle="collapse" data-target="#uniform-interface" data-parent="#constraint-accordian" href="#">Uniform Interface</a> <li><a data-toggle="collapse" data-target="#uniform-interface" data-parent="#constraint-accordian" href="#">Uniform Interface</a>
@ -115,16 +145,14 @@
</div> </div>
<hr> <hr>
<footer> <footer>
<p> <p><a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />This work by <a xmlns:cc="https://creativecommons.org/ns#" href="https://www.restapitutorial.com/" property="cc:attributionName" rel="cc:attributionURL">RestApiTutorial.com</a> is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>
&copy;Pearson eCollege, 2012. All rights reserved.
</p>
</footer> </footer>
</div> <!-- /container --> </div> <!-- /container -->
<div class="navbar navbar-fixed-top"> <div class="navbar navbar-fixed-top">
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a>
<a class="brand" href="http://www.restapitutorial.com">REST API Tutorial</a> <a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
<div class="nav-collapse"> <div class="nav-collapse">
<ul class="nav"> <ul class="nav">
<li><a href="../index.html">Home</a></li> <li><a href="../index.html">Home</a></li>
@ -148,7 +176,7 @@
================================================== --> ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/js/bootstrap.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/js/bootstrap.min.js"></script>
<a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://a248.e.akamai.net/camo.github.com/e6bef7a091f5f3138b8cd40bc3e114258dd68ddf/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub"></a> <a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://camo.githubusercontent.com/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a>
</body> </body>
</html> </html>

Binary file not shown.

View File

@ -7,14 +7,13 @@
<meta name="description" content="REST API eBook for Best Practices and other resources, such as open-source REST Service frameworks, etc."> <meta name="description" content="REST API eBook for Best Practices and other resources, such as open-source REST Service frameworks, etc.">
<meta name="author" content="Todd Fredrich, Pearson eCollege"> <meta name="author" content="Todd Fredrich, Pearson eCollege">
<!-- Le styles --> <!-- Le styles -->
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap.min.css" rel="stylesheet"> <link href="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css" rel="stylesheet">
<style type="text/css"> <style type="text/css">
body { body {
padding-top: 60px; padding-top: 60px;
padding-bottom: 40px; padding-bottom: 40px;
} }
</style> </style>
<link href="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script> <script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
@ -23,50 +22,92 @@
var _gaq = _gaq || []; var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31328878-1']); _gaq.push(['_setAccount', 'UA-31328878-1']);
_gaq.push(['_trackPageview']); _gaq.push(['_trackPageview']);
(function() { (function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})(); })();
</script> </script>
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '389059184866929');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=389059184866929&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
</head> </head>
<body> <body>
<div class="container"> <div class="container">
<div class="row">
<div class="span12 banner-container">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- Rest API Tutorial -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-2093481943685202"
data-ad-slot="4845828438"
data-ad-format="auto"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
<div class="row"> <div class="row">
<div class="span12"> <div class="span12">
<h1>REST API Resources</h1> <h1>REST API Resources</h1>
<h2>RESTful Best Practices</h2> <h2>Translations</h2>
<p>Get the Pearson eCollege <em>RESTful Best Practices</em> guide (choose your format). This guide reduces the world of RESTful services into easy-to-follow principles. It also provides several cookbook type recipes in critical areas to increase service usability, reduce confusion during implemenation, as well as improve consistency.</p> <dl>
<dt><a href="https://www.restapitutorial.ru/">Russian</a></dt>
<dd><a href="http://www.restapitutorial.ru/">http://www.restapitutorial.ru/</a></dd>
</dl>
<h2>REST API Cheat Sheets</h2>
<ul>
<li><a href="https://github.com/RestCheatSheet/api-cheat-sheet#api-design-cheat-sheet">API Design Cheat Sheet</a> - This GitHub repository outlines important tips to consider when designing APIs that developers love.</li>
<li><a href="https://github.com/RestCheatSheet/platform-cheat-sheet#platform-building-cheat-sheet">Platform-Building Cheat Sheet</a> - Everyone wants to build a platform. This GitHub repository is a public receptical of ground rules when building a platform.</li>
</ul>
<h2>REST API Best Practices</h2>
<p>Get the <em>RESTful Design Best Practices</em> guide (choose your format). This guide reduces the world of RESTful services design into easy-to-follow principles. It also provides several cookbook type recipes in critical areas to increase service usability, reduce confusion during implemenation, as well as improve consistency.</p>
<ul> <ul>
<li><a href="https://github.com/tfredrich/RestApiTutorial.com/raw/master/media/RESTful%20Best%20Practices-v1_2.pdf">PDF</a> (~306KB)</li> <li><a href="https://github.com/tfredrich/RestApiTutorial.com/raw/master/media/RESTful%20Best%20Practices-v1_2.pdf">PDF</a> (~306KB)</li>
<li><a href="https://github.com/tfredrich/RestApiTutorial.com/raw/master/media/RESTful%20Best%20Practices-v1_2.epub">ePub</a> (~46KB). Works on iPad, iPhone, B&amp;N Nook and most other readers.</li> <li><a href="https://github.com/tfredrich/RestApiTutorial.com/raw/master/media/RESTful%20Best%20Practices-v1_2.epub">ePub</a> (~46KB). Works on iPad, iPhone, B&amp;N Nook and most other readers.</li>
<li><a href="https://github.com/tfredrich/RestApiTutorial.com/raw/master/media/RESTful_Best_Practices_v1_2.mobi">Mobi</a> (~86KB). Works on Kindle, Kindle Reader Apps</li> <li><a href="https://github.com/tfredrich/RestApiTutorial.com/raw/master/media/RESTful%20Best%20Practices-v1_2.mobi">Mobi</a> (~86KB). Works on Kindle, Kindle Reader Apps</li>
<li><a href="https://github.com/tfredrich/RestApiTutorial.com/raw/master/media/RESTful%20Best%20Practices-v1_2.odt">Source Document in Libre/Open Office format</a> (~48KB)</li> <li><a href="https://github.com/tfredrich/RestApiTutorial.com/raw/master/media/RESTful%20Best%20Practices-v1_2.odt">Source Document in Libre/Open Office format</a> (~48KB)</li>
</ul> </ul>
<h2>REST Services in Java</h2> <h2>Building REST APIs in Java</h2>
<p><a href="https://github.com/RestExpress/RestExpress">RestExpress</a> (GitHub). Create fast, scalable, stand-alone RESTful Web services in Java quickly.</p> <p><a href="https://github.com/RestExpress/RestExpress">RestExpress</a> (GitHub). A lightweight microservices framework for Java, RestExpress composes best-of-breed tools to form a lightweight, minimalist Java framework for quickly creating RESTful APIs.</p>
<h2>Web Resources</h2> <h2>Web Resources</h2>
<ul> <ul>
<li><a href="http://www.youtube.com/user/restapitutorial">REST API Tutorial YouTube Channel</a></li> <li><a href="https://www.youtube.com/user/restapitutorial">REST API Tutorial YouTube Channel</a> - The companion channel where all of the videos for this site live.</li>
<li><a href="http://www.toddfredrich.com">Todd Fredrich's API Blog</a></li> <li><a href="https://www.youtube.com/channel/UCBSlXL7WCE-MR8uuwurqVKA">Sascha Preibisch YouTube Channel</a> - A great resource on Security; Particularly Oauth2 and OpenID Connect (OIDC).</li>
<li><a href="http://www.toddfredrich.com">Todd Fredrich's Blog</a></li>
</ul> </ul>
</div> </div>
</div> </div>
<hr> <hr>
<footer> <footer>
<p>&copy;Pearson eCollege, 2012. All rights reserved.</p> <p><a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-sa/4.0/88x31.png" /></a><br />This work by <a xmlns:cc="https://creativecommons.org/ns#" href="https://www.restapitutorial.com/" property="cc:attributionName" rel="cc:attributionURL">RestApiTutorial.com</a> is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.</p>
</footer> </footer>
</div> <!-- /container --> </div> <!-- /container -->
<div class="navbar navbar-fixed-top"> <div class="navbar navbar-fixed-top">
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a> <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a>
<a class="brand" href="http://www.restapitutorial.com">REST API Tutorial</a> <a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
<div class="nav-collapse"> <div class="nav-collapse">
<ul class="nav"> <ul class="nav">
<li><a href="http://www.restapitutorial.com">Home</a></li> <li><a href="https://www.restapitutorial.com">Home</a></li>
<li class="dropdown" id="api-school"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials<b class="caret"></b></a> <li class="dropdown" id="api-school"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials<b class="caret"></b></a>
<ul class="dropdown-menu"> <ul class="dropdown-menu">
<li><a href="lessons/whatisrest.html">What Is REST?</a></li> <li><a href="lessons/whatisrest.html">What Is REST?</a></li>
@ -87,7 +128,7 @@
================================================== --> ================================================== -->
<!-- Placed at the end of the document so the pages load faster --> <!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="https://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/js/bootstrap.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/js/bootstrap.min.js"></script>
<a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://a248.e.akamai.net/camo.github.com/e6bef7a091f5f3138b8cd40bc3e114258dd68ddf/687474703a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub"></a> <a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://camo.githubusercontent.com/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a>
</body> </body>
</html> </html>

167
restapiwebinar.html Normal file
View File

@ -0,0 +1,167 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google Analytics Content Experiment code -->
<script>function utmx_section(){}function utmx(){}(function(){var
k='59305729-0',d=document,l=d.location,c=d.cookie;
if(l.search.indexOf('utm_expid='+k)>0)return;
function f(n){if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.
indexOf(';',i);return escape(c.substring(i+n.length+1,j<0?c.
length:j))}}}var x=f('__utmx'),xx=f('__utmxx'),h=l.hash;d.write(
'<sc'+'ript src="'+'http'+(l.protocol=='https:'?'s://ssl':
'://www')+'.google-analytics.com/ga_exp.js?'+'utmxkey='+k+
'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime='+new Date().
valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+
'" type="text/javascript" charset="utf-8"><\/sc'+'ript>')})();
</script><script>utmx('url','A/B');</script>
<!-- End of Google Analytics Content Experiment code -->
<meta charset="utf-8">
<title>REST API Questions</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Enter your most-pressing REST API question">
<meta name="author" content="Todd Fredrich">
<!-- Le styles -->
<link href="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/css/bootstrap-combined.min.css" rel="stylesheet">
<link href="//cdn-images.mailchimp.com/embedcode/classic-10_7.css" rel="stylesheet" type="text/css">
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="//html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style type="text/css">
body {
padding-top: 60px;
padding-bottom: 40px;
}
.banner-container {
}
#mc_embed_signup{background:#8ac; clear:left; padding: 15px; border-radius: 25px; font:14px Helvetica,Arial,sans-serif; }
div.mc-field-group.input-group label{display:inline; margin-left: 10px; }
#mce-QUESTION1{width: 80%; height: 3em;}
#mce-QUESTION2{width: 80%; height: 3em; }
</style>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-31328878-1']);
_gaq.push(['_trackPageview']);
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '389059184866929');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=389059184866929&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
</head>
<body>
<div class="container">
<div class="row">
<div class="span7">
<h2>What's Your Most Burning REST API Question?</h2>
<p><strong>Hey Fellow REST-afarian!</strong></p>
<p>I'm creating a FREE Webinar about REST API Design and want to answer your most-pressing REST API question.</p>
<p>Enter your question in the form to the right, along with your email address and I'll answer your questions via the Webinar.</p>
<p>REST well,<br>
Todd Fredrich, <em>The REST API Tutor<em></p>
</div>
<div class="span5">
<!-- Begin MailChimp Signup Form -->
<div id="mc_embed_signup">
<form action="https://RestApiTutorial.us1.list-manage.com/subscribe/post?u=3449a65355441906371f87327&amp;id=95beecb082" method="post" id="mc-embedded-subscribe-form" name="mc-embedded-subscribe-form" class="validate" target="_blank" novalidate>
<div id="mc_embed_signup_scroll">
<h2>Submit it Now!</h2>
<div class="indicates-required"><span class="asterisk">*</span> indicates required</div>
<div class="mc-field-group">
<label for="mce-EMAIL">Email Address <span class="asterisk">*</span>
</label>
<input type="email" value="" name="EMAIL" class="required email" id="mce-EMAIL">
</div>
<div class="mc-field-group">
<label for="mce-FNAME">First Name </label>
<input type="text" value="" name="FNAME" class="" id="mce-FNAME">
</div>
<div class="mc-field-group">
<label for="mce-LNAME">Last Name </label>
<input type="text" value="" name="LNAME" class="" id="mce-LNAME">
</div>
<div class="mc-field-group">
<label for="mce-QUESTION1">My most-pressing REST API question <span class="asterisk">*</span>
</label>
<input type="text" value="" name="QUESTION1" class="required" id="mce-QUESTION1">
</div>
<div class="mc-field-group">
<label for="mce-QUESTION2">I also want to know about... </label>
<input type="text" value="" name="QUESTION2" class="" id="mce-QUESTION2">
</div>
<div class="mc-field-group input-group">
<strong>Additional Preferences </strong>
<ul><li><input type="checkbox" value="1" name="group[7181][1]" id="mce-group[7181]-7181-0"><label for="mce-group[7181]-7181-0">I'd rather have the book!</label></li>
<li><input type="checkbox" value="2" name="group[7181][2]" id="mce-group[7181]-7181-1"><label for="mce-group[7181]-7181-1">I'd rather have the Webinar recording.</label></li>
</ul>
</div>
<div id="mce-responses" class="clear">
<div class="response" id="mce-error-response" style="display:none"></div>
<div class="response" id="mce-success-response" style="display:none"></div>
</div> <!-- real people should not fill this in and expect good things - do not remove this or risk form bot signups-->
<div style="position: absolute; left: -5000px;" aria-hidden="true"><input type="text" name="b_3449a65355441906371f87327_95beecb082" tabindex="-1" value=""></div>
<div class="clear"><input type="submit" value="Submit Now!" name="subscribe" id="mc-embedded-subscribe" class="button"></div>
</div>
</form>
</div>
<script type='text/javascript' src='//s3.amazonaws.com/downloads.mailchimp.com/js/mc-validate.js'></script><script type='text/javascript'>(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]='EMAIL';ftypes[0]='email';fnames[1]='FNAME';ftypes[1]='text';fnames[2]='LNAME';ftypes[2]='text';fnames[3]='QUESTION1';ftypes[3]='text';fnames[4]='QUESTION2';ftypes[4]='text';}(jQuery));var $mcj = jQuery.noConflict(true);</script>
<!--End mc_embed_signup-->
</div>
</div>
<hr>
<footer>
</footer>
</div> <!-- /container -->
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a>
<a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
<div class="nav-collapse">
<ul class="nav">
<li><a href="https://www.restapitutorial.com">Home</a></li>
<li class="dropdown" id="api-school"><a class="dropdown-toggle" data-toggle="dropdown" href="#">Tutorials<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="lessons/whatisrest.html">What Is REST?</a></li>
<li><a href="lessons/restquicktips.html">REST Quick Tips</a></li>
<li><a href="lessons/httpmethods.html">HTTP Methods</a></li>
<li><a href="lessons/restfulresourcenaming.html">Resource Naming</a></li>
<li><a href="lessons/idempotency.html">Idempotence</a></li>
</ul>
</li>
<li><a href="httpstatuscodes.html">HTTP Status Codes</a></li>
<li><a href="resources.html">Resources</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</div>
</div>
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/twitter-bootstrap/2.0.4/js/bootstrap.min.js"></script>
<a href="https://github.com/tfredrich/RestApiTutorial.com"><img style="position: absolute; top: 0; right: 0; border: 0; z-index: 1050;" src="https://camo.githubusercontent.com/365986a132ccd6a44c23a9169022c0b5c890c387/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f72696768745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"></a>
</body>
</html>

View File

@ -1,13 +1,30 @@
<html> <html>
<head> <head>
<title>Moved to new URL: http://www.restapitutorial.com/lessons/restquicktips.html</title> <title>Moved to new URL: https://www.restapitutorial.com/lessons/restquicktips.html</title>
<meta http-equiv=refresh content="0; url=http://www.restapitutorial.com/lessons/restquicktips.html" /> <meta http-equiv=refresh content="0; url=https://www.restapitutorial.com/lessons/restquicktips.html" />
<meta name="robots" content="noindex,follow" /> <meta name="robots" content="noindex,follow" />
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '389059184866929');
fbq('track', 'PageView');
</script>
<noscript><img height="1" width="1" style="display:none"
src="https://www.facebook.com/tr?id=389059184866929&ev=PageView&noscript=1"
/></noscript>
<!-- End Facebook Pixel Code -->
</head> </head>
<body> <body>
<h1>This page has been moved to http://www.restapitutorial.com/lessons/restquicktips.html</h1> <h1>This page has been moved to https://www.restapitutorial.com/lessons/restquicktips.html</h1>
<p>If your browser doesn't redirect you to the new location please <p>If your browser doesn't redirect you to the new location please
<a href="http://www.restapitutorial.com/lessons/restquicktips.html"><strong>click here</strong></a>, <a href="https://www.restapitutorial.com/lessons/restquicktips.html"><strong>click here</strong></a>,
sorry for the hassles!</p> sorry for the hassles!</p>
</body> </body>
</html> </html>

View File

@ -1,43 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<urlset <urlset
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 xsi:schemaLocation="https://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> https://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
<url> <url>
<loc>http://www.restapitutorial.com/</loc> <loc>https://www.restapitutorial.com/</loc>
<lastmod>2014-02-03T14:55:39+00:00</lastmod> <lastmod>2018-07-03T12:55:39+00:00</lastmod>
</url> </url>
<url> <url>
<loc>http://www.restapitutorial.com/lessons/whatisrest.html</loc> <loc>https://www.restapitutorial.com/lessons/whatisrest.html</loc>
<lastmod>2013-09-04T14:55:39+00:00</lastmod> <lastmod>2015-01-14T12:55:39+00:00</lastmod>
</url> </url>
<url> <url>
<loc>http://www.restapitutorial.com/lessons/restquicktips.html</loc> <loc>https://www.restapitutorial.com/lessons/restquicktips.html</loc>
<lastmod>2014-02-03T14:55:39+00:00</lastmod> <lastmod>2017-12-29T21:54:09+07:00</lastmod>
</url> </url>
<url> <url>
<loc>http://www.restapitutorial.com/lessons/httpmethods.html</loc> <loc>https://www.restapitutorial.com/lessons/httpmethods.html</loc>
<lastmod>2013-09-04T14:55:39+00:00</lastmod> <lastmod>2017-05-12T12:55:39+00:00</lastmod>
</url> </url>
<url> <url>
<loc>http://www.restapitutorial.com/lessons/restfulresourcenaming.html</loc> <loc>https://www.restapitutorial.com/lessons/restfulresourcenaming.html</loc>
<lastmod>2013-09-04T14:55:39+00:00</lastmod> <lastmod>2017-12-29T12:55:39+00:00</lastmod>
</url> </url>
<url> <url>
<loc>http://www.restapitutorial.com/lessons/idempotency.html</loc> <loc>https://www.restapitutorial.com/lessons/idempotency.html</loc>
<lastmod>2013-09-21T14:55:39+00:00</lastmod> <lastmod>2015-02-14T12:55:39+00:00</lastmod>
</url> </url>
<url> <url>
<loc>http://www.restapitutorial.com/httpstatuscodes.html</loc> <loc>https://www.restapitutorial.com/httpstatuscodes.html</loc>
<lastmod>2014-02-03T14:55:39+00:00</lastmod> <lastmod>2017-05-12T12:55:39+00:00</lastmod>
</url> </url>
<url> <url>
<loc>http://www.restapitutorial.com/resources.html</loc> <loc>https://www.restapitutorial.com/resources.html</loc>
<lastmod>2013-21-21T14:55:39+00:00</lastmod> <lastmod>2021-01-05T12:55:39+00:00</lastmod>
</url> </url>
<url> <url>
<loc>http://www.restapitutorial.com/index.html</loc> <loc>https://www.restapitutorial.com/index.html</loc>
<lastmod>2013-09-21T14:55:39+00:00</lastmod> <lastmod>2018-07-03T12:55:39+00:00</lastmod>
</url> </url>
</urlset> <url>
<loc>https://www.restapitutorial.com/restapiwebinar.html</loc>
<lastmod>2018-06-10T12:55:39+00:00</lastmod>
</url>
</urlset>