Compare commits
103 Commits
v20140529-
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| b9dc2eaf8d | |||
| 8d0d964c8e | |||
| 0f82bfa256 | |||
| acd11d7c41 | |||
| 897540ed38 | |||
| 12d1c11994 | |||
| 69d51664ab | |||
| 1fa588ce40 | |||
| 01a12feeba | |||
| 7b7cff1c94 | |||
| a1cba0693e | |||
| 0f3ef6a83b | |||
| e0e71b551c | |||
| e1f9d28368 | |||
| 1db5a21da4 | |||
| af95f23004 | |||
| 062a6f2487 | |||
| 424ac0bd9f | |||
| 74c75058e1 | |||
| 7f80a401eb | |||
| f8e8d78f98 | |||
| 915a3b9e98 | |||
| a2fef915e3 | |||
| 78e451e720 | |||
| da3518b25a | |||
| 9a9af89f8a | |||
| 200081c87d | |||
| f6a197a9b1 | |||
| 50fccc7668 | |||
| f8ccf55972 | |||
| 5c0869c10e | |||
| 62057e2d07 | |||
| e5d2a99e9b | |||
| 8d2ba39827 | |||
| 8cfd28d3b8 | |||
| 4cd60b5dd7 | |||
| c5684fa7db | |||
| 418d535a45 | |||
| 83891a0807 | |||
| 636881f082 | |||
| dabd60b7b6 | |||
| a662dcca45 | |||
| b38a79fc55 | |||
| 0e5b67c2eb | |||
| a61020bc97 | |||
| 816397fcd7 | |||
| 05e5111325 | |||
| 18cd901d96 | |||
| af7b3a72e1 | |||
| 1a3933cd80 | |||
| e7b96001dc | |||
| ba7ead6b7e | |||
| fe8a646b63 | |||
| af1cc05b30 | |||
| 7520afd0ca | |||
| ad5a071cb5 | |||
| fda1204d7e | |||
| e2efaed4b8 | |||
| 9177aead7b | |||
| 3b2db68e89 | |||
| e4aa453faa | |||
| cd615511b9 | |||
| 6945ce7558 | |||
| 8276bfd5db | |||
| b181e6d397 | |||
| 0dc68d52b9 | |||
| 816cd178b2 | |||
| 8d78f05708 | |||
| d2a7f384e3 | |||
| 9e04cb8eda | |||
| dab538dbb1 | |||
| b172656254 | |||
| da3e07ad88 | |||
| e621ad70e5 | |||
| eadbe7ac73 | |||
| 519accfb0c | |||
| 42ce0d4ab0 | |||
| e50ab4f523 | |||
| a78b7317ed | |||
| b75fde2d35 | |||
| e756646b70 | |||
| b49225213c | |||
| fb896005bd | |||
| 6fc44055c2 | |||
| 55793ec003 | |||
| 9e6855a68f | |||
| 7e8a9aa32f | |||
| c14959d767 | |||
| 2a5906fd38 | |||
| df0db45e69 | |||
| c499e5f002 | |||
| ac19529169 | |||
| 535b659280 | |||
| ef377daffe | |||
| 3acaef38d5 | |||
| a901182775 | |||
| 856010a7e6 | |||
| 0ea4fb0326 | |||
| 7d2f2ddd43 | |||
| 4cdbd9ff80 | |||
| 2a4ad39911 | |||
| c0e566ec89 | |||
| c45c3d5a07 |
@ -7,3 +7,4 @@ RewriteRule ^(.*)$ http://www.restapitutorial.com/$1 [r=301,nc]
|
||||
//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/httpmethods.html http://www.restapitutorial.com/lessons/httpmethods.html
|
||||
Redirect 301 http://www.restapitutorial.com/apiconsulting.html http://www.restapitutorial.com/restapiwebinar.html
|
||||
|
||||
17
.project
17
.project
@ -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
428
LICENSE
Normal 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.
|
||||
|
||||
@ -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.
|
||||
|
||||

|
||||
|
||||
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
1
ads.txt
Normal file
@ -0,0 +1 @@
|
||||
google.com, pub-2093481943685202, DIRECT, f08c47fec0942fa0
|
||||
@ -1,13 +1,30 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Moved to new URL: http://www.restapitutorial.com/lessons/httpmethods.html</title>
|
||||
<meta http-equiv=refresh content="0; url=http://www.restapitutorial.com/lessons/httpmethods.html" />
|
||||
<title>Moved to new URL: https://www.restapitutorial.com/lessons/httpmethods.html</title>
|
||||
<meta http-equiv=refresh content="0; url=https://www.restapitutorial.com/lessons/httpmethods.html" />
|
||||
<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>
|
||||
<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
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@ -7,43 +7,76 @@
|
||||
<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">
|
||||
<!-- 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">
|
||||
body {
|
||||
padding-top: 60px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
a {
|
||||
cursor: pointer;
|
||||
}
|
||||
</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">
|
||||
|
||||
|
||||
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="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="span12">
|
||||
<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 class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -56,7 +89,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -84,7 +117,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<p>This class of status code indicates that the client's request was successfully received, understood, and accepted.</p>
|
||||
<h3>Wikipedia</h3>
|
||||
@ -94,7 +127,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<p>The request has succeeded. The information returned with the response is dependent on the method used in the request, for example:
|
||||
<ul>
|
||||
@ -110,7 +143,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -120,7 +153,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -131,7 +164,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -140,18 +173,18 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>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>
|
||||
<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 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">
|
||||
<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>
|
||||
@ -161,7 +194,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -179,7 +212,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<p>The 207 (Multi-Status) status code provides status for multiple independent operations (see section 11 for more information).</p>
|
||||
<h3>Wikipedia</h3>
|
||||
@ -187,7 +220,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -197,7 +230,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -213,7 +246,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -225,7 +258,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -235,7 +268,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -246,7 +279,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -259,7 +292,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -270,7 +303,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -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>
|
||||
<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><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 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">
|
||||
<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>
|
||||
@ -301,7 +335,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -309,7 +343,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -319,7 +353,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -339,7 +373,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -348,7 +382,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -357,7 +391,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<p>This code is reserved for future use.</p>
|
||||
<h3>Wikipedia</h3>
|
||||
@ -367,7 +401,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -376,7 +410,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -385,18 +419,17 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
<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 "Allow: GET, PUT, DELETE"</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -407,7 +440,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -415,7 +448,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -425,7 +458,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -435,7 +468,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -444,7 +477,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -454,7 +487,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -462,7 +495,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -471,7 +504,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -481,7 +514,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -489,7 +522,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -498,7 +531,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -508,21 +541,21 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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 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">
|
||||
<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>
|
||||
@ -532,7 +565,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -540,7 +573,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -548,7 +581,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<p>Slein, J., Whitehead, E.J., et al., "WebDAV Advanced Collections Protocol", Work In Progress.</p>
|
||||
<h3>Wikipedia</h3>
|
||||
@ -558,7 +591,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -566,48 +599,48 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>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 "lost update" conflicts.</p>
|
||||
<h3>Wikipedia</h3>
|
||||
<p>The origin server requires the request to be conditional. Intended to prevent "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." 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 "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.</p>
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>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>
|
||||
<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 class="row">
|
||||
<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">
|
||||
<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>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>
|
||||
<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 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">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<h3>Wikipedia</h3>
|
||||
<p>A Microsoft extension. The request should be retried after performing the appropriate action.</p>
|
||||
@ -616,14 +649,21 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -646,16 +686,16 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<p>The server encountered an unexpected condition which prevented it from fulfilling the request.</p>
|
||||
<h3>Wikipedia</h3>
|
||||
<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—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 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">
|
||||
<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>
|
||||
@ -663,7 +703,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -673,7 +713,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -682,7 +722,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -691,7 +731,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -701,7 +741,7 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
@ -709,7 +749,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -717,7 +757,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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 "Depth: infinity". This status indicates that the entire operation failed.</p>
|
||||
<h3>Wikipedia</h3>
|
||||
@ -727,14 +767,14 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<h3>Wikipedia</h3>
|
||||
<p>This status code, while used by many servers, is not specified in any RFCs.</p>
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -743,7 +783,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -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>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>
|
||||
<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. "captive portals" 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., "captive portals" used to require agreement to Terms of Service before granting full Internet access via a Wi-Fi hotspot).</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<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">
|
||||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<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">
|
||||
<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>
|
||||
@ -788,19 +828,17 @@
|
||||
</div>
|
||||
<hr>
|
||||
<footer>
|
||||
<p>
|
||||
©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>
|
||||
</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="http://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<div class="nav-collapse">
|
||||
<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>
|
||||
<ul class="dropdown-menu">
|
||||
<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 -->
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
|
||||
BIN
images/API Consulting Banner.psd
Normal file
BIN
images/API Consulting Banner.psd
Normal file
Binary file not shown.
BIN
images/api-consulting-banner1.png
Normal file
BIN
images/api-consulting-banner1.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
BIN
images/api-consulting-banner2.png
Normal file
BIN
images/api-consulting-banner2.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.9 KiB |
BIN
images/banner1.odg
Normal file
BIN
images/banner1.odg
Normal file
Binary file not shown.
BIN
images/banner1.xcf
Normal file
BIN
images/banner1.xcf
Normal file
Binary file not shown.
138
index.html
138
index.html
@ -1,92 +1,128 @@
|
||||
<!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 Tutorial</title>
|
||||
<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="author" content="Todd Fredrich, Pearson eCollege">
|
||||
<!-- 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">
|
||||
body {
|
||||
padding-top: 60px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
.banner-container {
|
||||
}
|
||||
</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">
|
||||
|
||||
|
||||
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="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 -->
|
||||
<div class="span10">
|
||||
<div class="hero-unit">
|
||||
<h1>Learn REST: 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>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>Jump in with <a href="lessons/whatisrest.html">What Is REST?</a>, an overview concepts and constraints of the RESTful architecture.</p>
|
||||
<p><a class="btn btn-primary btn-large" href="lessons/whatisrest.html">Get Started »</a></p>
|
||||
<h1>Learn <abbr title="Representational State Transfer">REST</abbr>: A RESTful Tutorial</h1>
|
||||
<p><strong>Hey, Fellow REST API Designer!</strong></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>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>—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 »</a></p>
|
||||
</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>
|
||||
<footer>
|
||||
<p>
|
||||
©Pearson eCollege, 2012. All rights reserved.
|
||||
</p>
|
||||
<p></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>
|
||||
</div>
|
||||
</div> <!-- /row -->
|
||||
</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="http://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<div class="nav-collapse">
|
||||
<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>
|
||||
<ul class="dropdown-menu">
|
||||
<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 -->
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
|
||||
@ -7,34 +7,64 @@
|
||||
<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">
|
||||
<!-- 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">
|
||||
body {
|
||||
padding-top: 60px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
</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">
|
||||
|
||||
|
||||
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="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="span8">
|
||||
<h1>Using HTTP Methods for RESTful Services</h1>
|
||||
@ -52,35 +82,46 @@
|
||||
</div>
|
||||
<div class="row">
|
||||
<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>
|
||||
<table class="table table-striped table-bordered">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>HTTP Verb</th>
|
||||
<th>CRUD</th>
|
||||
<th>Entire Collection (e.g. /customers)</th>
|
||||
<th>Specific Item (e.g. /customers/{id})</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<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>
|
||||
<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), single customer. 404 (Not Found), if ID not found or invalid.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<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>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>POST</td>
|
||||
<td>201 (Created), 'Location' header with link to /customers/{id} containing new ID.</td>
|
||||
<td>404 (Not Found).</td>
|
||||
<td>PATCH</td>
|
||||
<td>Update/Modify</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>
|
||||
<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>
|
||||
</tr>
|
||||
</tbody>
|
||||
@ -91,14 +132,25 @@
|
||||
<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>
|
||||
<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="#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>
|
||||
</ul>
|
||||
<div id="methodTabContent" class="tab-content">
|
||||
<div class="tab-pane fade in active" id="get">
|
||||
<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>
|
||||
<div class="tab-pane fade in active" id="post">
|
||||
<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>Do not expose unsafe operations via GET—it should never modify any resources on the server.</p>
|
||||
<p><strong>Examples:</strong></p>
|
||||
@ -109,7 +161,7 @@
|
||||
</ul>
|
||||
</div>
|
||||
<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>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>
|
||||
@ -122,21 +174,23 @@
|
||||
<li><em>PUT http://www.example.com/buckets/secret_stuff</em></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="tab-pane fade" id="post">
|
||||
<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>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>
|
||||
<div class="tab-pane fade" id="patch">
|
||||
<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>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>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>
|
||||
<ul>
|
||||
<li><em>POST http://www.example.com/customers</em></li>
|
||||
<li><em>POST http://www.example.com/customers/12345/orders</em></li>
|
||||
<li><em>PATCH http://www.example.com/customers/12345</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>
|
||||
</div>
|
||||
<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>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>
|
||||
<ul>
|
||||
<li><em>DELETE http://www.example.com/customers/12345</em></li>
|
||||
@ -149,16 +203,14 @@
|
||||
</div>
|
||||
<hr>
|
||||
<footer>
|
||||
<p>
|
||||
©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>
|
||||
</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="http://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<div class="nav-collapse">
|
||||
<ul class="nav">
|
||||
<li><a href="../index.html">Home</a></li>
|
||||
@ -182,7 +234,7 @@
|
||||
================================================== -->
|
||||
<!-- 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://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/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>
|
||||
<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>
|
||||
|
||||
@ -7,34 +7,64 @@
|
||||
<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">
|
||||
<!-- 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">
|
||||
body {
|
||||
padding-top: 60px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
</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">
|
||||
|
||||
|
||||
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="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="span7">
|
||||
<h1>What Is Idempotence?</h1>
|
||||
@ -57,7 +87,7 @@
|
||||
</div>
|
||||
<div id="video1" class="row collapse in">
|
||||
<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 class="row">
|
||||
@ -66,34 +96,21 @@
|
||||
</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>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>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 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>
|
||||
<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>
|
||||
<hr>
|
||||
<footer>
|
||||
<p>
|
||||
©Pearson eCollege, 2012-2013. 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>
|
||||
</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="http://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<div class="nav-collapse">
|
||||
<ul class="nav">
|
||||
<li><a href="../index.html">Home</a></li>
|
||||
@ -117,7 +134,7 @@
|
||||
================================================== -->
|
||||
<!-- 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://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/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>
|
||||
<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>
|
||||
|
||||
@ -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="author" content="Todd Fredrich, Pearson eCollege">
|
||||
<!-- 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">
|
||||
body {
|
||||
padding-top: 60px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
</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">
|
||||
|
||||
|
||||
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="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="span8">
|
||||
<h1>Resource Naming</h1>
|
||||
@ -53,7 +83,7 @@
|
||||
<div class="row">
|
||||
<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>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>Some example resources are:</p>
|
||||
<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>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>
|
||||
<li>Twitter: https://dev.twitter.com/docs/api</li>
|
||||
<li>Facebook: http://developers.facebook.com/docs/reference/api/</li>
|
||||
<li>Twitter: https://developer.twitter.com/en/docs/api-reference-index</li>
|
||||
<li>Facebook: https://developers.facebook.com/docs/reference/api/</li>
|
||||
<li>LinkedIn: https://developer.linkedin.com/apis</li>
|
||||
</ul>
|
||||
</div>
|
||||
@ -146,16 +176,14 @@
|
||||
</div>
|
||||
<hr>
|
||||
<footer>
|
||||
<p>
|
||||
©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>
|
||||
</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="http://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<div class="nav-collapse">
|
||||
<ul class="nav">
|
||||
<li><a href="../index.html">Home</a></li>
|
||||
@ -179,7 +207,7 @@
|
||||
================================================== -->
|
||||
<!-- 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://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/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>
|
||||
<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>
|
||||
|
||||
@ -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="author" content="Todd Fredrich, Pearson eCollege">
|
||||
<!-- 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">
|
||||
body {
|
||||
padding-top: 60px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
</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">
|
||||
|
||||
|
||||
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="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="span8">
|
||||
<h1>REST API Quick Tips</h1>
|
||||
@ -53,19 +83,23 @@
|
||||
<div class="row">
|
||||
<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>
|
||||
<h2>Use HTTP Verbs to 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>Generally, the four primary HTTP verb are used as follows:
|
||||
<h2>Use HTTP Verbs to Make Your Requests Mean Something</h2>
|
||||
<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 verbs are used as follows:
|
||||
<dl>
|
||||
<dt>GET</dt>
|
||||
<dd>Read a specific resource (by an identifier) or a collection of resources.</dd>
|
||||
<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>
|
||||
<dd>Remove/delete a specific resource by an identifier.</dd>
|
||||
<dt>POST</dt>
|
||||
<dd>Create a new resource. Also a catch-all verb for operations that don't fit into the other categories.</dd>
|
||||
</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>
|
||||
<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>
|
||||
@ -76,30 +110,30 @@
|
||||
<ul><li><strong>Good:</strong> /users/12345</li><li><strong>Poor:</strong> /api?type=user&id=23</li></ul></li>
|
||||
<li>Leverage the hierarchical nature of the URL to imply structure.</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.
|
||||
<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>Keep URLs as short as possible, with as few segments as makes sense.</li>
|
||||
</ul>
|
||||
</p>
|
||||
<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 "Top 10" HTTP Response Status Codes are as follows:
|
||||
<dl>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<dd>Error code response for missing or invalid authentication token.</dd>
|
||||
<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>
|
||||
<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>
|
||||
@ -111,18 +145,18 @@
|
||||
</dl>
|
||||
</p>
|
||||
<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>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>In other words, make the XML that is returned more JSON-like: 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 nobody uses the XML responses anyway over 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>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 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, 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="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>
|
||||
<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—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>
|
||||
<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
|
||||
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>
|
||||
<li>A context IRI,</li>
|
||||
<li>a link relation type</li>
|
||||
@ -132,21 +166,19 @@
|
||||
A link can be viewed as a statement of the form "{context IRI} has a
|
||||
{relation type} resource at {target IRI}, which has {target
|
||||
attributes}."</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>
|
||||
<hr>
|
||||
<footer>
|
||||
<p>
|
||||
©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>
|
||||
</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="http://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<div class="nav-collapse">
|
||||
<ul class="nav">
|
||||
<li><a href="../index.html">Home</a></li>
|
||||
@ -170,7 +202,7 @@
|
||||
================================================== -->
|
||||
<!-- 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://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/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>
|
||||
<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>
|
||||
|
||||
@ -7,36 +7,66 @@
|
||||
<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">
|
||||
<!-- 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">
|
||||
body {
|
||||
padding-top: 60px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
</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">
|
||||
|
||||
|
||||
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="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="span8">
|
||||
<div class="span8">
|
||||
<h1>What Is REST?</h1>
|
||||
</div>
|
||||
<div class="span4">
|
||||
@ -57,12 +87,12 @@
|
||||
</div>
|
||||
<div id="video1" class="row collapse in">
|
||||
<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 class="row">
|
||||
<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>
|
||||
<ul id="constraint-accordian">
|
||||
<li><a data-toggle="collapse" data-target="#uniform-interface" data-parent="#constraint-accordian" href="#">Uniform Interface</a>
|
||||
@ -115,16 +145,14 @@
|
||||
</div>
|
||||
<hr>
|
||||
<footer>
|
||||
<p>
|
||||
©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>
|
||||
</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="http://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<div class="nav-collapse">
|
||||
<ul class="nav">
|
||||
<li><a href="../index.html">Home</a></li>
|
||||
@ -148,7 +176,7 @@
|
||||
================================================== -->
|
||||
<!-- 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://d7im4lln3lvbg.cloudfront.net/bootstrap/2.0.1/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>
|
||||
<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>
|
||||
|
||||
Binary file not shown.
BIN
media/RESTful Best Practices-v2_0.odt
Normal file
BIN
media/RESTful Best Practices-v2_0.odt
Normal file
Binary file not shown.
@ -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="author" content="Todd Fredrich, Pearson eCollege">
|
||||
<!-- 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">
|
||||
body {
|
||||
padding-top: 60px;
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
</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>
|
||||
@ -23,50 +22,92 @@
|
||||
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="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="span12">
|
||||
<h1>REST API Resources</h1>
|
||||
<h2>RESTful Best Practices</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>
|
||||
<h2>Translations</h2>
|
||||
<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>
|
||||
<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&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>
|
||||
</ul>
|
||||
<h2>REST Services 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>
|
||||
<h2>Building REST APIs in Java</h2>
|
||||
<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>
|
||||
<ul>
|
||||
<li><a href="http://www.youtube.com/user/restapitutorial">REST API Tutorial YouTube Channel</a></li>
|
||||
<li><a href="http://www.toddfredrich.com">Todd Fredrich's API Blog</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="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>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<footer>
|
||||
<p>©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>
|
||||
</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="http://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<a class="brand" href="https://www.restapitutorial.com">REST API Tutorial</a>
|
||||
<div class="nav-collapse">
|
||||
<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>
|
||||
<ul class="dropdown-menu">
|
||||
<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 -->
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
|
||||
167
restapiwebinar.html
Normal file
167
restapiwebinar.html
Normal 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&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>
|
||||
@ -1,13 +1,30 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Moved to new URL: http://www.restapitutorial.com/lessons/restquicktips.html</title>
|
||||
<meta http-equiv=refresh content="0; url=http://www.restapitutorial.com/lessons/restquicktips.html" />
|
||||
<title>Moved to new URL: https://www.restapitutorial.com/lessons/restquicktips.html</title>
|
||||
<meta http-equiv=refresh content="0; url=https://www.restapitutorial.com/lessons/restquicktips.html" />
|
||||
<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>
|
||||
<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
|
||||
<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>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
50
sitemap.xml
50
sitemap.xml
@ -1,43 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset
|
||||
xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
|
||||
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
|
||||
xmlns="https://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://www.sitemaps.org/schemas/sitemap/0.9
|
||||
https://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
|
||||
<url>
|
||||
<loc>http://www.restapitutorial.com/</loc>
|
||||
<lastmod>2014-02-03T14:55:39+00:00</lastmod>
|
||||
<loc>https://www.restapitutorial.com/</loc>
|
||||
<lastmod>2018-07-03T12:55:39+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://www.restapitutorial.com/lessons/whatisrest.html</loc>
|
||||
<lastmod>2013-09-04T14:55:39+00:00</lastmod>
|
||||
<loc>https://www.restapitutorial.com/lessons/whatisrest.html</loc>
|
||||
<lastmod>2015-01-14T12:55:39+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://www.restapitutorial.com/lessons/restquicktips.html</loc>
|
||||
<lastmod>2014-02-03T14:55:39+00:00</lastmod>
|
||||
<loc>https://www.restapitutorial.com/lessons/restquicktips.html</loc>
|
||||
<lastmod>2017-12-29T21:54:09+07:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://www.restapitutorial.com/lessons/httpmethods.html</loc>
|
||||
<lastmod>2013-09-04T14:55:39+00:00</lastmod>
|
||||
<loc>https://www.restapitutorial.com/lessons/httpmethods.html</loc>
|
||||
<lastmod>2017-05-12T12:55:39+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://www.restapitutorial.com/lessons/restfulresourcenaming.html</loc>
|
||||
<lastmod>2013-09-04T14:55:39+00:00</lastmod>
|
||||
<loc>https://www.restapitutorial.com/lessons/restfulresourcenaming.html</loc>
|
||||
<lastmod>2017-12-29T12:55:39+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://www.restapitutorial.com/lessons/idempotency.html</loc>
|
||||
<lastmod>2013-09-21T14:55:39+00:00</lastmod>
|
||||
<loc>https://www.restapitutorial.com/lessons/idempotency.html</loc>
|
||||
<lastmod>2015-02-14T12:55:39+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://www.restapitutorial.com/httpstatuscodes.html</loc>
|
||||
<lastmod>2014-02-03T14:55:39+00:00</lastmod>
|
||||
<loc>https://www.restapitutorial.com/httpstatuscodes.html</loc>
|
||||
<lastmod>2017-05-12T12:55:39+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://www.restapitutorial.com/resources.html</loc>
|
||||
<lastmod>2013-21-21T14:55:39+00:00</lastmod>
|
||||
<loc>https://www.restapitutorial.com/resources.html</loc>
|
||||
<lastmod>2021-01-05T12:55:39+00:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>http://www.restapitutorial.com/index.html</loc>
|
||||
<lastmod>2013-09-21T14:55:39+00:00</lastmod>
|
||||
<loc>https://www.restapitutorial.com/index.html</loc>
|
||||
<lastmod>2018-07-03T12:55:39+00:00</lastmod>
|
||||
</url>
|
||||
</urlset>
|
||||
<url>
|
||||
<loc>https://www.restapitutorial.com/restapiwebinar.html</loc>
|
||||
<lastmod>2018-06-10T12:55:39+00:00</lastmod>
|
||||
</url>
|
||||
</urlset>
|
||||
|
||||
Reference in New Issue
Block a user