<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://microformats.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DrErnie</id>
	<title>Microformats Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://microformats.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=DrErnie"/>
	<link rel="alternate" type="text/html" href="https://microformats.org/wiki/Special:Contributions/DrErnie"/>
	<updated>2026-05-15T03:46:35Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.4</generator>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=events/2009-06-26-microformats-4th-bday&amp;diff=39292</id>
		<title>events/2009-06-26-microformats-4th-bday</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=events/2009-06-26-microformats-4th-bday&amp;diff=39292"/>
		<updated>2009-06-26T17:07:39Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* regrets */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;entry-title&amp;gt;microformats.org 4th birthday party!&amp;lt;/entry-title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Celebrate the 4th birthday of http://microformats.org! One of several microformats [[events]].&lt;br /&gt;
&lt;br /&gt;
If you'd like to help out with or attend the party, please add your name below.&lt;br /&gt;
&lt;br /&gt;
[[#attending|RSVP]] &amp;lt;strong&amp;gt;required&amp;lt;/strong&amp;gt; for venue capacity tracking.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;event-page vevent&amp;quot; id=&amp;quot;party&amp;quot;&amp;gt;&lt;br /&gt;
== overview ==&lt;br /&gt;
;When&lt;br /&gt;
:&amp;lt;span class=&amp;quot;dtstart&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;2009&amp;lt;/span&amp;gt;-&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;06&amp;lt;/span&amp;gt;-&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;26&amp;lt;/span&amp;gt; a&amp;lt;span class=&amp;quot;value&amp;quot; style=&amp;quot;text-transform:lowercase&amp;quot;&amp;gt;T&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;19&amp;lt;/span class=&amp;quot;value&amp;quot;&amp;gt;:&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;:&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt; to &amp;lt;span class=&amp;quot;dtend&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;2009&amp;lt;/span&amp;gt;-&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;06&amp;lt;/span&amp;gt;-&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;26&amp;lt;/span&amp;gt; a&amp;lt;span class=&amp;quot;value&amp;quot; style=&amp;quot;text-transform:lowercase&amp;quot;&amp;gt;T&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;22&amp;lt;/span&amp;gt;:&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;:&amp;lt;span class=&amp;quot;value&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
;Where&lt;br /&gt;
:&amp;lt;span class=&amp;quot;location vcard&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;fn org&amp;quot;&amp;gt;[http://www.yelp.com/biz/b-restaurant-and-bar-san-francisco B Restaurant and Bar]&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;adr&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;street-address&amp;quot;&amp;gt;720 Howard Street&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;extended-address&amp;quot;&amp;gt;Yerba Buena Upper Terrace&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;locality&amp;quot;&amp;gt;San Francisco&amp;lt;/span&amp;gt;, &amp;lt;span class=&amp;quot;region&amp;quot;&amp;gt;CA&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;postal-code&amp;quot;&amp;gt;94103&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;country-name&amp;quot;&amp;gt;USA&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
;What&lt;br /&gt;
:&amp;lt;span class=&amp;quot;summary&amp;quot;&amp;gt;microformats.org 4th birthday party!&amp;lt;/span&amp;gt;&lt;br /&gt;
;Web&lt;br /&gt;
:&amp;lt;span class=&amp;quot;url&amp;quot;&amp;gt;http://microformats.org/wiki/events/2009-06-26-microformats-4th-bday&amp;lt;/span&amp;gt;&lt;br /&gt;
;Donation&lt;br /&gt;
:Donation requested at the door: sliding scale $5-$20. &lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- end event-page vevent --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''[http://feeds.technorati.com/events/microformats.org/wiki/events/2009-06-26-microformats-4th-bday%23party Add this event to your calendar]''' [http://feeds.technorati.com/events/microformats.org/wiki/events/2009-06-26-microformats-4th-bday%23party http://www.boogdesign.com/images/buttons/microformat_hcalendar.png]&lt;br /&gt;
 &lt;br /&gt;
== sponsors ==&lt;br /&gt;
Please sign up to sponsor the microformats.org 4th birthday party!&lt;br /&gt;
&lt;br /&gt;
* [http://objectadjective.com Object Adjective] is a proud sponsor of this event.&lt;br /&gt;
* [http://www.ribbit.com/ Ribbit] is proud to sponsor the party&lt;br /&gt;
* [http://spinn3r.com Spinn3r] is a proud sponsor of the party&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== planners ==&lt;br /&gt;
This section is for organizing a party for the upcoming 4th birthday of http://microformats.org.&lt;br /&gt;
&lt;br /&gt;
I'm donating my time before the event to help plan and make the party happen!&lt;br /&gt;
* [[User:Tantek|Tantek Çelik]] - coordinating, sponsors&lt;br /&gt;
* [[User:Rohit|Rohit Khare]] - sponsors&lt;br /&gt;
* [[User:Kevin_Marks|Kevin Marks]] - sponsors&lt;br /&gt;
* [[User:BenWard|Ben Ward]] - tshirts, sponsors&lt;br /&gt;
* [[User:Pseudowish|Lauren Scime]] - design / venue / sponsors / publicity&lt;br /&gt;
* [[User:Repeatpenguin|Jeremy Anderson]] - will be assisting Lauren w/ above.&lt;br /&gt;
&lt;br /&gt;
We need:&lt;br /&gt;
* a volunteer coordinator. someone to coordinate the volunteers listed below.&lt;br /&gt;
* [[stickers]] - Lauren is on it &lt;br /&gt;
** 500 rounded square 2&amp;quot; stickers w/logo on black background have come in the mail &lt;br /&gt;
* tshirts - Ben is on it&lt;br /&gt;
&lt;br /&gt;
== volunteers ==&lt;br /&gt;
Sign up to be a volunteer!&lt;br /&gt;
We need volunteers to check people in at the door, take donations, hand out stickers, t-shirts etc.&lt;br /&gt;
* [[User:Richardault|Richard Ault]] - Checking names and taking donations for at least first hour.  Need to find money box.  Also need more volunteers to do same.&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== donations ==&lt;br /&gt;
* Donation requested at the door: sliding scale $5-$20.  $10 or more gets you a t-shirt (may have to order them on demand and hand out at the next dinner depending on whether t-shirts arrive or not).&lt;br /&gt;
* Donations go towards the party and [[events/2009-07-18-dev-camp|microformatsDevCamp]] this summer.&lt;br /&gt;
* Spinn3r would be willing to donate/sponsor some...&lt;br /&gt;
&lt;br /&gt;
== attending ==&lt;br /&gt;
I'm going to show up and help celebrate so I'm signing up here with my name linked to my user page (or personal web site).&lt;br /&gt;
# [[User:Tantek|Tantek Çelik]]&lt;br /&gt;
# [[User:Kevin_Marks|Kevin Marks]]&lt;br /&gt;
# [[User:BenWard|Ben Ward]]&lt;br /&gt;
# [[User:Pseudowish|Lauren Scime]]&lt;br /&gt;
# [[User:Repeatpenguin|Jeremy Anderson]]&lt;br /&gt;
# [[User:Richardault|Richard Ault]]&lt;br /&gt;
# [[User:KevinBurton|Kevin Burton]] of [http://spinn3r.com Spinn3r] - I will be by for an hour or so... Spinn3r's 3.0 launch dinn3r is that evening too.&lt;br /&gt;
# [[User:Singpolyma|Singpolyma]]&lt;br /&gt;
# [http://brynnevans.com Brynn Evans]&lt;br /&gt;
# [http://factoryjoe.com Chris Messina]&lt;br /&gt;
# [http://lizdunn.com Liz Dunn]&lt;br /&gt;
# [http://www.myspace.com/ciberch Monica Keller]&lt;br /&gt;
# [http://www.reelgeek.com Erin Caton]&lt;br /&gt;
# [http://www.dustindiaz.com Dustin Diaz]&lt;br /&gt;
# [http://pixelimplosion.com Robert Andersen]&lt;br /&gt;
# ...&lt;br /&gt;
&lt;br /&gt;
== regrets ==&lt;br /&gt;
I'd love to be there but can't. Happy 4th birthday from afar!&lt;br /&gt;
* [[User:Rohit|Rohit Khare]]&lt;br /&gt;
* [[User:Cindyli|Cindy Li]]&lt;br /&gt;
* [[User:Tonystubblebine|Tony Stubblebine]]&lt;br /&gt;
* [[User:Anildash|Anildash]] 20:07, 24 June 2009 (UTC)&lt;br /&gt;
* [[User:NiallKennedy|Niall Kennedy]] - in Los Angeles&lt;br /&gt;
* [[User:KaviGoel|Kavi Goel]]&lt;br /&gt;
* [[User:DrErnie|Ernest Prabhakar]]&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== location ==&lt;br /&gt;
* [http://www.yelp.com/biz/b-restaurant-and-bar-san-francisco B Restaurant and Bar] - June 26th, 2009 at 7pm&lt;br /&gt;
** Will have hors d'oeuvres and about 50-60 drink tix to hand out to people at the door. Attendees can buy drinks at cash bar after drink tix are used.&lt;br /&gt;
&lt;br /&gt;
== date ==&lt;br /&gt;
* 2009-06-26 Friday&lt;br /&gt;
&lt;br /&gt;
== Promotional Graphics ==&lt;br /&gt;
* Banners &amp;amp; Images of Various Sizes: Promote Microformats 4 Year Birthday Party!&lt;br /&gt;
** [http://anendlessarray.com/microformats/88x31.jpg 88x31px]&lt;br /&gt;
** [http://anendlessarray.com/microformats/120x240.jpg 120x240px]&lt;br /&gt;
** [http://anendlessarray.com/microformats/125x125.jpg 125x125px]&lt;br /&gt;
** [http://anendlessarray.com/microformats/200x100.jpg 200x100px]&lt;br /&gt;
** [http://anendlessarray.com/microformats/200x200.jpg 200x200px]&lt;br /&gt;
** [http://anendlessarray.com/microformats/250x250.jpg 250x250px]&lt;br /&gt;
** [http://anendlessarray.com/microformats/300x225.jpg 300x225px]&lt;br /&gt;
** [http://anendlessarray.com/microformats/468x60.jpg 468x468px]&lt;br /&gt;
** [http://anendlessarray.com/microformats/160x600.jpg 160x600px]&lt;br /&gt;
** [http://anendlessarray.com/microformats/728x90.jpg 728x90px]&lt;br /&gt;
** [http://anendlessarray.com/microformats/728x90-pink.jpg 728x90px w/Pink]&lt;br /&gt;
&lt;br /&gt;
* Note: If you are DYING to have a different size than the ones up here I can either send you the photoshop file or make you a custom one - Just send a request to lauren@objectadjective.com or find pseudowish on the [[IRC]]&lt;br /&gt;
&lt;br /&gt;
== Related Pages==&lt;br /&gt;
{{events-related-pages}}&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=37838</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=37838"/>
		<updated>2009-02-06T18:44:25Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Resources */ JSON query google group&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# defines a generic query syntax&lt;br /&gt;
# uses hypermedia (links + context) to manage application state &lt;br /&gt;
# does NOT become a full-fledged [http://hideoustriumph.wordpress.com/2008/05/05/ws-deathstar-for-the-rest-of-us/ RPC] solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal] by Joe Gregorio&lt;br /&gt;
* [http://www.json.com/2008/08/19/standardizing-restful-json/ Standardizing RESTful JSON] by Kris Zyp&lt;br /&gt;
* [http://groups.google.com/group/restful-json RESTful JSON Google Group] -&amp;gt; [http://groups.google.com/group/json-query JSON Query] group&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
* [[rest/urls]]&lt;br /&gt;
* [[rest/json-collections]]&lt;br /&gt;
* [http://goessner.net/articles/JsonPath/ JSON Path]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/07/16/jsonquery-data-querying-beyond-jsonpath/ JSON Query]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
* [http://www.json.com/specifications/json-resources/ JSON Resources]&lt;br /&gt;
* [http://groups.google.com/group/restful-json/browse_thread/thread/8c33618df87d85f8 HyperJSON]&lt;br /&gt;
* [http://groups.google.com/group/restful-json/browse_thread/thread/b3e8aa78052f67f1# HyperJSON Path Expressions]&lt;br /&gt;
* [http://www.subbu.org/blog/2008/10/generalized-linking Generalized JSON Linking]&lt;br /&gt;
* [http://json-schema.org/ JSON Schema]&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
* Is the top-level entity a simple array (Persevere, Dojo) or a full-fledged object (CouchDB, ActiveRecord?)&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;br /&gt;
* [http://code.google.com/p/grassyknoll/ Grassy Knoll] (Python)&lt;br /&gt;
* [http://simile.mit.edu/wiki/Exhibit/Getting_Started_Tutorial Exhibit] ([http://simile.mit.edu/exhibit/examples/nobelists/nobelists.js example])&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=34359</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=34359"/>
		<updated>2008-11-12T19:16:35Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Proposals */ JSON Schema&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# defines a generic query syntax&lt;br /&gt;
# uses hypermedia (links + context) to manage application state &lt;br /&gt;
# does NOT become a full-fledged [http://hideoustriumph.wordpress.com/2008/05/05/ws-deathstar-for-the-rest-of-us/ RPC] solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal] by Joe Gregorio&lt;br /&gt;
* [http://www.json.com/2008/08/19/standardizing-restful-json/ Standardizing RESTful JSON] by Kris Zyp&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
* [[rest/urls]]&lt;br /&gt;
* [[rest/json-collections]]&lt;br /&gt;
* [http://goessner.net/articles/JsonPath/ JSON Path]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/07/16/jsonquery-data-querying-beyond-jsonpath/ JSON Query]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
* [http://www.json.com/specifications/json-resources/ JSON Resources]&lt;br /&gt;
* [http://groups.google.com/group/restful-json/browse_thread/thread/8c33618df87d85f8 HyperJSON]&lt;br /&gt;
* [http://groups.google.com/group/restful-json/browse_thread/thread/b3e8aa78052f67f1# HyperJSON Path Expressions]&lt;br /&gt;
* [http://www.subbu.org/blog/2008/10/generalized-linking Generalized JSON Linking]&lt;br /&gt;
* [http://json-schema.org/ JSON Schema]&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
* Is the top-level entity a simple array (Persevere, Dojo) or a full-fledged object (CouchDB, ActiveRecord?)&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;br /&gt;
* [http://code.google.com/p/grassyknoll/ Grassy Knoll] (Python)&lt;br /&gt;
* [http://simile.mit.edu/wiki/Exhibit/Getting_Started_Tutorial Exhibit] ([http://simile.mit.edu/exhibit/examples/nobelists/nobelists.js example])&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest&amp;diff=31523</id>
		<title>rest</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest&amp;diff=31523"/>
		<updated>2008-11-06T18:19:12Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Microformats in REST Web Services =&lt;br /&gt;
This the page for discussion, research, and standards regarding how to optimally use Microformats as the encoding for [http://en.wikipedia.org/wiki/Representational_State_Transfer Representational State Transfer (REST)] web services. REST is a software architectural style for distributed hypermedia systems like the world wide web. The goal is for all REST-related information in the microformats world to live under this URL.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://microformats.org/discuss/mail/microformats-rest/ uf-rest] discussion list on microformats.org&lt;br /&gt;
* [http://groups.yahoo.com/group/rest-discuss/ rest-discuss] @ Yahoo Groups&lt;br /&gt;
* [http://rails.campfirenow.com/a6dc1 REST on Rails] @ Rails CampfireNow&lt;br /&gt;
* REST [http://search.restlet.org search engine]&lt;br /&gt;
* [http://akamai.infoworld.com/weblog/stratdev/archives/Patterns.pdf Patterns for a RESTful SOA] great overview of concepts and techniques&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
=== URLs ===&lt;br /&gt;
;[[rest/opacity]]&lt;br /&gt;
:Properly Interpreting the &amp;quot;Axiom of URI Opacity&amp;quot;&lt;br /&gt;
;[[rest/urls]]&lt;br /&gt;
:How should URLs be structured for maximum clarity &amp;amp; discoverability?&lt;br /&gt;
;[[rest/property]]&lt;br /&gt;
:How to emulate WebDAV-style properties (metadata) over standard HTTP&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;[[rest/ahah]]&lt;br /&gt;
:Asynchronous HTML vs. AJAX&lt;br /&gt;
;[[rest/datatypes]]&lt;br /&gt;
:How to encode type information in HTML&lt;br /&gt;
;[[rest/description]]&lt;br /&gt;
:What, if anything, is the analogue of WSDL for REST services?&lt;br /&gt;
;[[rest/webforms]]&lt;br /&gt;
:Upgrading browsers to support PUT and DELETE properly&lt;br /&gt;
&lt;br /&gt;
=== Implementations ===&lt;br /&gt;
;[[rest/rails]]&lt;br /&gt;
:Ways to make Ruby on Rails more REST-friendly out of the box.&lt;br /&gt;
;[[rest/json]]&lt;br /&gt;
:[http://groups.google.com/group/restful-json RESTful-JSON], a generic data container [http://bitworking.org/news/restful_json alternative] to [http://tools.ietf.org/html/rfc5023 AtomPub].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Standards ===&lt;br /&gt;
* [http://www.ietf.org/rfc/rfc3205.txt HTTP as a Substrate] - Best Current Practice&lt;br /&gt;
* [http://www.faqs.org/rfcs/rfc2483.html text/uri-list] (Section 5, URI Resolution Services)&lt;br /&gt;
&lt;br /&gt;
== Background Research ==&lt;br /&gt;
=== Examples ===&lt;br /&gt;
* [[rest/examples]]&lt;br /&gt;
* [[rest/forms-examples]]&lt;br /&gt;
&lt;br /&gt;
=== Brainstorming ===&lt;br /&gt;
&lt;br /&gt;
* [[rest/brainstorming]]&lt;br /&gt;
* [[rest/forms-brainstorming]]&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
Note that these are all preliminary.&lt;br /&gt;
&lt;br /&gt;
* [http://www.opendarwin.org/~drernie/talk/rest-enabled-xhtml-20051019.html REST-Enabled XHTML]] by Dr. Ernie&lt;br /&gt;
** original at [[rest/rex-proposal]]&lt;br /&gt;
* [http://restylab.php5.cz/dreams/webutopia.html WebUtopia] by Toydi&lt;br /&gt;
** more details in rest-discuss thread: [http://groups.yahoo.com/group/rest-discuss/message/5290 &amp;quot;Dreams about ReSTifying web apps&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
&lt;br /&gt;
=== Atom-based alternatives === &lt;br /&gt;
* [http://ietfreport.isoc.org/idref/draft-ietf-atompub-protocol/ Atom Publishing Protocol]&lt;br /&gt;
* Google's [http://code.google.com/apis/gdata/overview.html GData]&lt;br /&gt;
&lt;br /&gt;
=== Tools === &lt;br /&gt;
* [[xoxo-sample-code| XOXO parser (python)]]&lt;br /&gt;
** also [http://www.opendarwin.org/~drernie/xoxo-plist.py xoxo-plist.py], a pyobjc variant support Mac OS X plists]&lt;br /&gt;
* [http://www.opendarwin.org/~drernie/src/ahah.js ahah.js] Asynchronous HTML over HTTP&lt;br /&gt;
** was [http://epeus.blogspot.com/2005_05_01_epeus_archive.html#111588374981985824 JAH], an [http://technorati.com/tag/AJAX AJAX] alternative)&lt;br /&gt;
* Ruby RESTifarian plugin&lt;br /&gt;
  $ script/plugin install restifarian # need beta gems/edge rails for this to work&lt;br /&gt;
** See also prototype [http://www.onautopilot.com/oss/rails/rest_controller.rb controller]&lt;br /&gt;
* [http://wiki.jonnay.net/bunny/meditation/meditation Meditation] a PHP REST API Framework.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
* [http://www.opendarwin.org/~drernie/C499496031/E20051019100520/index.html DARC]: Darwin-Apache-Rails-CoreData&lt;br /&gt;
* [http://www.opendarwin.org/~drernie/C499496031/E20051026153908/index.html TurboGear] AddressBook (Mac OS X-only)&lt;br /&gt;
=== Sites ===&lt;br /&gt;
* [http://www.larrystaton.com Larry Staton Jr.] AHAH-enabled homepage (a first!)&lt;br /&gt;
&lt;br /&gt;
== Participants ==&lt;br /&gt;
* [http://www.opendarwin.org/~drernie/C395201355/index.html Dr. Ernie Prabhakar]&lt;br /&gt;
* [http://restylab.php5.cz/ Teo HuiMing (toydi)]&lt;br /&gt;
* [mailto:dimitri.glazkov@gmail.com Dimitri Glazkov]&lt;br /&gt;
* [http://www.xrest.org Max Voelkel (xamde)]&lt;br /&gt;
* [http://www.loudthinking.com/ David Heinemeier Hansson]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[rest/cgi]]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=30133</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=30133"/>
		<updated>2008-11-05T22:25:01Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Proposals */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# defines a generic query syntax&lt;br /&gt;
# uses hypermedia (links + context) to manage application state &lt;br /&gt;
# does NOT become a full-fledged [http://hideoustriumph.wordpress.com/2008/05/05/ws-deathstar-for-the-rest-of-us/ RPC] solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal] by Joe Gregorio&lt;br /&gt;
* [http://www.json.com/2008/08/19/standardizing-restful-json/ Standardizing RESTful JSON] by Kris Zyp&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
* [[rest/urls]]&lt;br /&gt;
* [[rest/json-collections]]&lt;br /&gt;
* [http://goessner.net/articles/JsonPath/ JSON Path]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/07/16/jsonquery-data-querying-beyond-jsonpath/ JSON Query]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
* [http://www.json.com/specifications/json-resources/ JSON Resources]&lt;br /&gt;
* [http://groups.google.com/group/restful-json/browse_thread/thread/8c33618df87d85f8 HyperJSON]&lt;br /&gt;
* [http://groups.google.com/group/restful-json/browse_thread/thread/b3e8aa78052f67f1# HyperJSON Path Expressions]&lt;br /&gt;
* [http://www.subbu.org/blog/2008/10/generalized-linking Generalized JSON Linking]&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
* Is the top-level entity a simple array (Persevere, Dojo) or a full-fledged object (CouchDB, ActiveRecord?)&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;br /&gt;
* [http://code.google.com/p/grassyknoll/ Grassy Knoll] (Python)&lt;br /&gt;
* [http://simile.mit.edu/wiki/Exhibit/Getting_Started_Tutorial Exhibit] ([http://simile.mit.edu/exhibit/examples/nobelists/nobelists.js example])&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=31575</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=31575"/>
		<updated>2008-10-24T16:22:33Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Ruby */ link to routing guide&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful] [http://www.softiesonrails.com/2007/4/10/rest-101-part-3-just-call-me-the-repo-man URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Most browsers do not currently support PUT and DELETE (HTML forms only allow &amp;quot;get&amp;quot; and &amp;quot;post&amp;quot;, links are always &amp;quot;get&amp;quot;).  The other methods can be emulated by providing a &amp;quot;method&amp;quot; parameter with a value of &amp;quot;PUT&amp;quot; and &amp;quot;DELETE&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #23 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://en.wikipedia.org/wiki/List_of_HTTP_status_codes HTTP Response Codes]. Some common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.&lt;br /&gt;
=== Redirection ===&lt;br /&gt;
;303 See Other: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.&lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 14.47]) containing a challenge applicable to the requested resource.&lt;br /&gt;
;404 Not Found: The requested resource could not be found([http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 section 10.4.5]).&lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
; 422 Unprocessable Entity: The server understands the media type of the request entity, but was unable to process the contained instructions.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://guides.rubyonrails.org/routing_outside_in.html Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
&lt;br /&gt;
* [http://github.com/shuber/restful_rails/tree/master RestfulRails] An extendable PHP library to communicate with RESTful rails applications&lt;br /&gt;
&lt;br /&gt;
== Perl ==&lt;br /&gt;
&lt;br /&gt;
* [http://dev.catalyst.perl.org/wiki/crud/crud_and_rest Catalyst CRUD and REST]&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/manual.html#restful-services  Python Routes]&lt;br /&gt;
* [http://pylonshq.com/docs/module-pylons.decorators.rest.html Pylons REST Decorators]&lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM-Resource] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=29874</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=29874"/>
		<updated>2008-10-15T19:46:43Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* PHP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful] [http://www.softiesonrails.com/2007/4/10/rest-101-part-3-just-call-me-the-repo-man URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Most browsers do not currently support PUT and DELETE (HTML forms only allow &amp;quot;get&amp;quot; and &amp;quot;post&amp;quot;, links are always &amp;quot;get&amp;quot;).  The other methods can be emulated by providing a &amp;quot;method&amp;quot; parameter with a value of &amp;quot;PUT&amp;quot; and &amp;quot;DELETE&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #23 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://en.wikipedia.org/wiki/List_of_HTTP_status_codes HTTP Response Codes]. Some common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.&lt;br /&gt;
=== Redirection ===&lt;br /&gt;
;303 See Other: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.&lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 14.47]) containing a challenge applicable to the requested resource.&lt;br /&gt;
;404 Not Found: The requested resource could not be found([http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 section 10.4.5]).&lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
; 422 Unprocessable Entity: The server understands the media type of the request entity, but was unable to process the contained instructions.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
&lt;br /&gt;
* [http://github.com/shuber/restful_rails/tree/master RestfulRails] An extendable PHP library to communicate with RESTful rails applications&lt;br /&gt;
&lt;br /&gt;
== Perl ==&lt;br /&gt;
&lt;br /&gt;
* [http://dev.catalyst.perl.org/wiki/crud/crud_and_rest Catalyst CRUD and REST]&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/manual.html#restful-services  Python Routes]&lt;br /&gt;
* [http://pylonshq.com/docs/module-pylons.decorators.rest.html Pylons REST Decorators]&lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM-Resource] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=29808</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=29808"/>
		<updated>2008-10-15T19:45:57Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Examples in the Wild */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful] [http://www.softiesonrails.com/2007/4/10/rest-101-part-3-just-call-me-the-repo-man URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Most browsers do not currently support PUT and DELETE (HTML forms only allow &amp;quot;get&amp;quot; and &amp;quot;post&amp;quot;, links are always &amp;quot;get&amp;quot;).  The other methods can be emulated by providing a &amp;quot;method&amp;quot; parameter with a value of &amp;quot;PUT&amp;quot; and &amp;quot;DELETE&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #23 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://en.wikipedia.org/wiki/List_of_HTTP_status_codes HTTP Response Codes]. Some common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.&lt;br /&gt;
=== Redirection ===&lt;br /&gt;
;303 See Other: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.&lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 14.47]) containing a challenge applicable to the requested resource.&lt;br /&gt;
;404 Not Found: The requested resource could not be found([http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 section 10.4.5]).&lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
; 422 Unprocessable Entity: The server understands the media type of the request entity, but was unable to process the contained instructions.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
&lt;br /&gt;
* [http://github.com/shuber/restful_rails/tree/master Catalyst PHP access to RESTful Rails]&lt;br /&gt;
&lt;br /&gt;
== Perl ==&lt;br /&gt;
&lt;br /&gt;
* [http://dev.catalyst.perl.org/wiki/crud/crud_and_rest Catalyst CRUD and REST]&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/manual.html#restful-services  Python Routes]&lt;br /&gt;
* [http://pylonshq.com/docs/module-pylons.decorators.rest.html Pylons REST Decorators]&lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM-Resource] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=29807</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=29807"/>
		<updated>2008-10-14T19:06:01Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Python */ pylons, routes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful] [http://www.softiesonrails.com/2007/4/10/rest-101-part-3-just-call-me-the-repo-man URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Most browsers do not currently support PUT and DELETE (HTML forms only allow &amp;quot;get&amp;quot; and &amp;quot;post&amp;quot;, links are always &amp;quot;get&amp;quot;).  The other methods can be emulated by providing a &amp;quot;method&amp;quot; parameter with a value of &amp;quot;PUT&amp;quot; and &amp;quot;DELETE&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #23 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://en.wikipedia.org/wiki/List_of_HTTP_status_codes HTTP Response Codes]. Some common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.&lt;br /&gt;
=== Redirection ===&lt;br /&gt;
;303 See Other: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.&lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 14.47]) containing a challenge applicable to the requested resource.&lt;br /&gt;
;404 Not Found: The requested resource could not be found([http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5 section 10.4.5]).&lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
; 422 Unprocessable Entity: The server understands the media type of the request entity, but was unable to process the contained instructions.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
&lt;br /&gt;
== Perl ==&lt;br /&gt;
&lt;br /&gt;
* [http://dev.catalyst.perl.org/wiki/crud/crud_and_rest Catalyst CRUD and REST]&lt;br /&gt;
&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/manual.html#restful-services  Python Routes]&lt;br /&gt;
* [http://pylonshq.com/docs/module-pylons.decorators.rest.html Pylons REST Decorators]&lt;br /&gt;
&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM-Resource] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=governance&amp;diff=32812</id>
		<title>governance</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=governance&amp;diff=32812"/>
		<updated>2008-10-13T20:35:08Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Admins ==&lt;br /&gt;
{{TOC-right}}&lt;br /&gt;
See [[admins]] and &amp;lt;span id=&amp;quot;Contact&amp;quot;&amp;gt;[[admins#contacting|contacting admins]]&amp;lt;/span&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Administrative intervention ==&lt;br /&gt;
&lt;br /&gt;
Intervention by the administration will be done so only as necessary.  The individuals in this group primarily exist to keep the wiki, IRC and mailing lists orderly (reverting spam, blocking vandalism etc.).  Stronger action will only be taken when a community member acts in direct contradiction to the [[how-to-play]] guidelines.&lt;br /&gt;
&lt;br /&gt;
=== Suspension Policy ===&lt;br /&gt;
&lt;br /&gt;
In extreme cases, the administrators may decide to ban an individual from posting to the mailing list and/or editing the wiki (alternatively, they may require all posts to first be moderated).&lt;br /&gt;
&lt;br /&gt;
This decision is not taken lightly, and will only be done if all the administrators are in agreement with the decision.&lt;br /&gt;
&lt;br /&gt;
Suspensions are usually for a fixed time period, to allow &amp;quot;cooling off.&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
How a suspended/moderated individual can return to good standing will be stated when the action is taken on a case-by-case status.&lt;br /&gt;
&lt;br /&gt;
Appealing an action or decision can be done by using one of the points of contacts mentioned above.&lt;br /&gt;
&lt;br /&gt;
== Issues  ==&lt;br /&gt;
See [[governance-issues]] for suggestions on how to improve governance.&lt;br /&gt;
&lt;br /&gt;
== References  ==&lt;br /&gt;
&lt;br /&gt;
* [http://headrush.typepad.com/creating_passionate_users/2006/04/angrynegative_p.html Angry/negative people can be bad for your brain]&lt;br /&gt;
* [http://www.amazon.com/Asshole-Rule-Civilized-Workplace-Surviving/dp/0446526568 The No A**hole Rule: Building a Civilized Workplace and Surviving One That Isn't]&lt;br /&gt;
* [http://chuqui.typepad.com/chuqui_30/2008/10/a-group-is-its.html A Group is its own worst enemy]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=29991</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=29991"/>
		<updated>2008-09-13T05:08:23Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Proposals */ JSON Path, Query&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# defines a generic query syntax&lt;br /&gt;
# uses hypermedia (links + context) to manage application state &lt;br /&gt;
# does NOT become a full-fledged [http://hideoustriumph.wordpress.com/2008/05/05/ws-deathstar-for-the-rest-of-us/ RPC] solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal] by Joe Gregorio&lt;br /&gt;
* [http://www.json.com/2008/08/19/standardizing-restful-json/ Standardizing RESTful JSON] by Kris Zyp&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://goessner.net/articles/JsonPath/ JSON Path]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/07/16/jsonquery-data-querying-beyond-jsonpath/ JSON Query]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
*  [http://www.json.com/specifications/json-resources/ JSON Resources]&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
* Is the top-level entity a simple array (Persevere, Dojo) or a full-fledged object (CouchDB, ActiveRecord?)&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;br /&gt;
* [http://code.google.com/p/grassyknoll/ Grassy Knoll] (Python)&lt;br /&gt;
* [http://simile.mit.edu/wiki/Exhibit/Getting_Started_Tutorial Exhibit] ([http://simile.mit.edu/exhibit/examples/nobelists/nobelists.js example])&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28737</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28737"/>
		<updated>2008-09-13T04:35:08Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Charter */ query&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# defines a generic query syntax&lt;br /&gt;
# uses hypermedia (links + context) to manage application state &lt;br /&gt;
# does NOT become a full-fledged [http://hideoustriumph.wordpress.com/2008/05/05/ws-deathstar-for-the-rest-of-us/ RPC] solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal] by Joe Gregorio&lt;br /&gt;
* [http://www.json.com/2008/08/19/standardizing-restful-json/ Standardizing RESTful JSON] by Kris Zyp&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
*  [http://www.json.com/specifications/json-resources/ JSON Resources]&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
* Is the top-level entity a simple array (Persevere, Dojo) or a full-fledged object (CouchDB, ActiveRecord?)&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;br /&gt;
* [http://code.google.com/p/grassyknoll/ Grassy Knoll] (Python)&lt;br /&gt;
* [http://simile.mit.edu/wiki/Exhibit/Getting_Started_Tutorial Exhibit] ([http://simile.mit.edu/exhibit/examples/nobelists/nobelists.js example])&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28736</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28736"/>
		<updated>2008-09-05T21:25:23Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Implementations */ Exhibit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# use of hypermedia (links + context) to manage application state &lt;br /&gt;
# does NOT become a full-fledged [http://hideoustriumph.wordpress.com/2008/05/05/ws-deathstar-for-the-rest-of-us/ RPC] solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal] by Joe Gregorio&lt;br /&gt;
* [http://www.json.com/2008/08/19/standardizing-restful-json/ Standardizing RESTful JSON] by Kris Zyp&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
*  [http://www.json.com/specifications/json-resources/ JSON Resources]&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
* Is the top-level entity a simple array (Persevere, Dojo) or a full-fledged object (CouchDB, ActiveRecord?)&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;br /&gt;
* [http://code.google.com/p/grassyknoll/ Grassy Knoll] (Python)&lt;br /&gt;
* [http://simile.mit.edu/wiki/Exhibit/Getting_Started_Tutorial Exhibit] ([http://simile.mit.edu/exhibit/examples/nobelists/nobelists.js example])&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28581</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28581"/>
		<updated>2008-09-05T20:36:34Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Proposals */ http://www.json.com/specifications/json-resources/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# use of hypermedia (links + context) to manage application state &lt;br /&gt;
# does NOT become a full-fledged [http://hideoustriumph.wordpress.com/2008/05/05/ws-deathstar-for-the-rest-of-us/ RPC] solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal] by Joe Gregorio&lt;br /&gt;
* [http://www.json.com/2008/08/19/standardizing-restful-json/ Standardizing RESTful JSON] by Kris Zyp&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
*  [http://www.json.com/specifications/json-resources/ JSON Resources]&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
* Is the top-level entity a simple array (Persevere, Dojo) or a full-fledged object (CouchDB, ActiveRecord?)&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;br /&gt;
* [http://code.google.com/p/grassyknoll/ Grassy Knoll] (Python)&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28580</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28580"/>
		<updated>2008-09-05T20:35:47Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Implementations */ Grassy Knoll&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# use of hypermedia (links + context) to manage application state &lt;br /&gt;
# does NOT become a full-fledged [http://hideoustriumph.wordpress.com/2008/05/05/ws-deathstar-for-the-rest-of-us/ RPC] solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal] by Joe Gregorio&lt;br /&gt;
* [http://www.json.com/2008/08/19/standardizing-restful-json/ Standardizing RESTful JSON] by Kris Zyp&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
* Is the top-level entity a simple array (Persevere, Dojo) or a full-fledged object (CouchDB, ActiveRecord?)&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;br /&gt;
* [http://code.google.com/p/grassyknoll/ Grassy Knoll] (Python)&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28579</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28579"/>
		<updated>2008-09-04T16:31:23Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: == Issues ==&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# use of hypermedia (links + context) to manage application state &lt;br /&gt;
# does NOT become a full-fledged [http://hideoustriumph.wordpress.com/2008/05/05/ws-deathstar-for-the-rest-of-us/ RPC] solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal] by Joe Gregorio&lt;br /&gt;
* [http://www.json.com/2008/08/19/standardizing-restful-json/ Standardizing RESTful JSON] by Kris Zyp&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
&lt;br /&gt;
== Issues ==&lt;br /&gt;
* Is the top-level entity a simple array (Persevere, Dojo) or a full-fledged object (CouchDB, ActiveRecord?)&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28571</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28571"/>
		<updated>2008-09-04T16:21:45Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Charter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# use of hypermedia (links + context) to manage application state &lt;br /&gt;
# does NOT become a full-fledged [http://hideoustriumph.wordpress.com/2008/05/05/ws-deathstar-for-the-rest-of-us/ RPC] solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal] by Joe Gregorio&lt;br /&gt;
* [http://www.json.com/2008/08/19/standardizing-restful-json/ Standardizing RESTful JSON] by Kris Zyp&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28569</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28569"/>
		<updated>2008-09-04T16:15:52Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: resources&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# use of hypermedia (links + context) to manage application state&lt;br /&gt;
# does NOT become a full-fledged RPC solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal] by Joe Gregorio&lt;br /&gt;
* [http://www.json.com/2008/08/19/standardizing-restful-json/ Standardizing RESTful JSON] by Kris Zyp&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28568</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28568"/>
		<updated>2008-09-04T16:13:33Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: CouchDB&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# use of hypermedia (links + context) to manage application state&lt;br /&gt;
# does NOT become a full-fledged RPC solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal]&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://incubator.apache.org/couchdb/docs/intro.html CouchDB]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (same URLs as ActiveResource)&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28567</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28567"/>
		<updated>2008-09-04T00:23:02Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Implementations */ http://sitepen.com/labs/persevere.php&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
''[Initial Draft by [[User:DrErnie|Dr. Ernie]] 12:55, 2 Sep 2008 (PDT)]''&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# use of hypermedia (links + context) to manage application state&lt;br /&gt;
# does NOT become a full-fledged RPC solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal]&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://sitepen.com/labs/persevere.php Persevere]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28532</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28532"/>
		<updated>2008-09-02T19:57:30Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Charter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
''[Initial Draft by [[User:DrErnie|Dr. Ernie]] 12:55, 2 Sep 2008 (PDT)]''&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# use of hypermedia (links + context) to manage application state&lt;br /&gt;
# does NOT become a full-fledged RPC solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal]&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28507</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28507"/>
		<updated>2008-09-02T19:55:00Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: marked as draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
[Initial Draft by [[User:DrErnie|Dr. Ernie]] 12:55, 2 Sep 2008 (PDT)]&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# use of hypermedia (links + context) to manage application state&lt;br /&gt;
# does NOT become a full-fledged RPC solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal]&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28506</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28506"/>
		<updated>2008-09-02T19:54:28Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: Charter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Charter ==&lt;br /&gt;
&lt;br /&gt;
Given that:&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Representational_State_Transfer REST] is a powerful architecture for scalable web services&lt;br /&gt;
* [http://www.json.org/ JSON] is a lightweight container for exchanging data&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023  AtomPub], while RESTful, requires XML documents with strict metadata requirements&lt;br /&gt;
&lt;br /&gt;
The goal of the RESTful JSON project is to develop a series of conventions for:&lt;br /&gt;
* URLs&lt;br /&gt;
* HTTP methods&lt;br /&gt;
* HTTP headers&lt;br /&gt;
* JSON fields&lt;br /&gt;
that:&lt;br /&gt;
# is maximally compatible with existing (RESTful, generic) clients&lt;br /&gt;
# enables partial updates&lt;br /&gt;
# allows paging and/or partial returns of large datasets&lt;br /&gt;
# standardizes linking to related resources&lt;br /&gt;
# use of hypermedia (links + context) to manage application state&lt;br /&gt;
# does NOT become a full-fledged RPC solution&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal]&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
*  [http://www.sitepen.com/blog/2008/06/17/json-referencing-in-dojo/ JSON Referencing]&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28505</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28505"/>
		<updated>2008-09-02T19:01:10Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: initial page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= RESTful JSON =&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://bitworking.org/news/restful_json Original proposal]&lt;br /&gt;
* [http://groups.google.com/group/restful-json Google Group]&lt;br /&gt;
* [http://tools.ietf.org/html/rfc5023 AtomPub] (for comparison/inspiration)&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
*  [[rest/urls]]&lt;br /&gt;
*  [[rest/json-collections]]&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester]&lt;br /&gt;
* [http://www.sitepen.com/blog/2008/06/13/restful-json-dojo-data/ Dojo REST store]&lt;br /&gt;
* [http://code.google.com/p/dom-resource/ DOM Resource]&lt;br /&gt;
* [http://github.com/sproutit/sproutcore/wikis/sproutcore-rest-api-the-definitive-guide SproutCore]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28499</id>
		<title>rest/json</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json&amp;diff=28499"/>
		<updated>2008-09-02T18:55:35Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: rest/json moved to rest/json-collections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[rest/json-collections]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest&amp;diff=30007</id>
		<title>rest</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest&amp;diff=30007"/>
		<updated>2008-08-27T20:31:21Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Topics */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Microformats in REST Web Services =&lt;br /&gt;
This the page for discussion, research, and standards regarding how to optimally use Microformats as the encoding for [http://en.wikipedia.org/wiki/Representational_State_Transfer Representational State Transfer (REST)] web services. REST is a software architectural style for distributed hypermedia systems like the world wide web. The goal is for all REST-related information in the microformats world to live under this URL.&lt;br /&gt;
&lt;br /&gt;
== Resources ==&lt;br /&gt;
* [http://microformats.org/discuss/mail/microformats-rest/ uf-rest] discussion list on microformats.org&lt;br /&gt;
* [http://groups.yahoo.com/group/rest-discuss/ rest-discuss] @ Yahoo Groups&lt;br /&gt;
* [http://rails.campfirenow.com/a6dc1 REST on Rails] @ Rails CampfireNow&lt;br /&gt;
* REST [http://search.restlet.org search engine]&lt;br /&gt;
&lt;br /&gt;
== Topics ==&lt;br /&gt;
=== URLs ===&lt;br /&gt;
;[[rest/opacity]]&lt;br /&gt;
:Properly Interpreting the &amp;quot;Axiom of URI Opacity&amp;quot;&lt;br /&gt;
;[[rest/urls]]&lt;br /&gt;
:How should URLs be structured for maximum clarity &amp;amp; discoverability?&lt;br /&gt;
;[[rest/property]]&lt;br /&gt;
:How to emulate WebDAV-style properties (metadata) over standard HTTP&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;[[rest/ahah]]&lt;br /&gt;
:Asynchronous HTML vs. AJAX&lt;br /&gt;
;[[rest/datatypes]]&lt;br /&gt;
:How to encode type information in HTML&lt;br /&gt;
;[[rest/description]]&lt;br /&gt;
:What, if anything, is the analogue of WSDL for REST services?&lt;br /&gt;
;[[rest/webforms]]&lt;br /&gt;
:Upgrading browsers to support PUT and DELETE properly&lt;br /&gt;
&lt;br /&gt;
=== Implementations ===&lt;br /&gt;
;[[rest/rails]]&lt;br /&gt;
:Ways to make Ruby on Rails more REST-friendly out of the box.&lt;br /&gt;
;[[rest/json]]&lt;br /&gt;
:[http://groups.google.com/group/restful-json RESTful-JSON], a generic data container [http://bitworking.org/news/restful_json alternative] to [http://tools.ietf.org/html/rfc5023 AtomPub].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Standards ===&lt;br /&gt;
* [http://www.ietf.org/rfc/rfc3205.txt HTTP as a Substrate] - Best Current Practice&lt;br /&gt;
* [http://www.faqs.org/rfcs/rfc2483.html text/uri-list] (Section 5, URI Resolution Services)&lt;br /&gt;
&lt;br /&gt;
== Background Research ==&lt;br /&gt;
=== Examples ===&lt;br /&gt;
* [[rest/examples]]&lt;br /&gt;
* [[rest/forms-examples]]&lt;br /&gt;
&lt;br /&gt;
=== Brainstorming ===&lt;br /&gt;
&lt;br /&gt;
* [[rest/brainstorming]]&lt;br /&gt;
* [[rest/forms-brainstorming]]&lt;br /&gt;
&lt;br /&gt;
== Proposals ==&lt;br /&gt;
Note that these are all preliminary.&lt;br /&gt;
&lt;br /&gt;
* [http://www.opendarwin.org/~drernie/talk/rest-enabled-xhtml-20051019.html REST-Enabled XHTML]] by Dr. Ernie&lt;br /&gt;
** original at [[rest/rex-proposal]]&lt;br /&gt;
* [http://restylab.php5.cz/dreams/webutopia.html WebUtopia] by Toydi&lt;br /&gt;
** more details in rest-discuss thread: [http://groups.yahoo.com/group/rest-discuss/message/5290 &amp;quot;Dreams about ReSTifying web apps&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
&lt;br /&gt;
=== Atom-based alternatives === &lt;br /&gt;
* [http://ietfreport.isoc.org/idref/draft-ietf-atompub-protocol/ Atom Publishing Protocol]&lt;br /&gt;
* Google's [http://code.google.com/apis/gdata/overview.html GData]&lt;br /&gt;
&lt;br /&gt;
=== Tools === &lt;br /&gt;
* [[xoxo-sample-code| XOXO parser (python)]]&lt;br /&gt;
** also [http://www.opendarwin.org/~drernie/xoxo-plist.py xoxo-plist.py], a pyobjc variant support Mac OS X plists]&lt;br /&gt;
* [http://www.opendarwin.org/~drernie/src/ahah.js ahah.js] Asynchronous HTML over HTTP&lt;br /&gt;
** was [http://epeus.blogspot.com/2005_05_01_epeus_archive.html#111588374981985824 JAH], an [http://technorati.com/tag/AJAX AJAX] alternative)&lt;br /&gt;
* Ruby RESTifarian plugin&lt;br /&gt;
  $ script/plugin install restifarian # need beta gems/edge rails for this to work&lt;br /&gt;
** See also prototype [http://www.onautopilot.com/oss/rails/rest_controller.rb controller]&lt;br /&gt;
* [http://wiki.jonnay.net/bunny/meditation/meditation Meditation] a PHP REST API Framework.&lt;br /&gt;
&lt;br /&gt;
=== Examples ===&lt;br /&gt;
* [http://www.opendarwin.org/~drernie/C499496031/E20051019100520/index.html DARC]: Darwin-Apache-Rails-CoreData&lt;br /&gt;
* [http://www.opendarwin.org/~drernie/C499496031/E20051026153908/index.html TurboGear] AddressBook (Mac OS X-only)&lt;br /&gt;
=== Sites ===&lt;br /&gt;
* [http://www.larrystaton.com Larry Staton Jr.] AHAH-enabled homepage (a first!)&lt;br /&gt;
&lt;br /&gt;
== Participants ==&lt;br /&gt;
* [http://www.opendarwin.org/~drernie/C395201355/index.html Dr. Ernie Prabhakar]&lt;br /&gt;
* [http://restylab.php5.cz/ Teo HuiMing (toydi)]&lt;br /&gt;
* [mailto:dimitri.glazkov@gmail.com Dimitri Glazkov]&lt;br /&gt;
* [http://www.xrest.org Max Voelkel (xamde)]&lt;br /&gt;
* [http://www.loudthinking.com/ David Heinemeier Hansson]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
*[[rest/cgi]]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json-collections&amp;diff=28432</id>
		<title>rest/json-collections</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json-collections&amp;diff=28432"/>
		<updated>2008-08-27T19:59:05Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Fields */ bolded field names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JSON Web Collection =  This is a trial balloon for a new format, tentatively dubbed &amp;quot;JSON Web Collections&amp;quot;, with a MIME-type of application/webcoll+json.&lt;br /&gt;
== Fields ==   Every JSON Web Collection is a JSON text, normally an object, and is interpreted as follows:  &lt;br /&gt;
#  A field named '''href''' is a URI reference for retrieving the collection.  If absent, the collection cannot be retrieved by standardized means. &lt;br /&gt;
# A field named '''id''' is a URI reference that identifies the collection.  If absent, the collection is ad hoc and has no stable identity. The result from GETting this URI is outside the scope of this standard.  Note that two instances of a collection may have the same '''id''' but different '''href''' values if the collection is available from more than one URI. &lt;br /&gt;
# A field named '''version''' is an opaque string that identifies this version of the collection; any changes to the collection require the version to change.  It may or may not be derived from a timestamp. &lt;br /&gt;
# A field named '''type''' is a string representing the media type of the members of this collection.  If absent, no type information is available. &lt;br /&gt;
# A field named '''members''' is an array of objects which represent the resources that are members of the collection.  Each object may have '''href''', '''id''', '''version''', and '''type''' fields specific to that member. In addition: &lt;br /&gt;
## A field named '''value''' in a member object is the JSON value that represents the member resource. &lt;br /&gt;
## A field named '''precis''' in a member object is a JSON value that is related to, but not necessarily the same as, the value that represents the member resource.  It is typically shorter or simpler. &lt;br /&gt;
## A field named '''members''' in a member object is an array of member objects, and means that the member is itself a collection with the given members.  Note that the type of a member is also a way to specify that it is a collection. &lt;br /&gt;
## Other fields may be present in a member object, but their meanings are not defined by this standard. &lt;br /&gt;
#  Likewise, other fields may be present in a collection object, but their meanings are not defined by this standard. &lt;br /&gt;
#  If the collection is an array of objects, then this array is conceptually the value of the '''members''' field, and all other fields are unavailable. &lt;br /&gt;
#  If the collection is an array of strings, then the strings represent the '''href''' fields of the member objects, and all other fields of both member objects and the collection object itself are unavailable.&lt;br /&gt;
&lt;br /&gt;
== Remarks == General remark: most of this is fairly boilerplate, but the concept of collections that contain collections in a uniform way is new, and means that we don't need separate mechanisms for service documents or magic ways to create new collections.  A service document is just an ordinary collection of available collections, and adding a new collection is just POSTing to it.  Typically the member objects in a service document would not contain &amp;quot;members&amp;quot; or &amp;quot;value&amp;quot; fields, though they might contain a &amp;quot;precis&amp;quot; field.&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json-collections&amp;diff=28431</id>
		<title>rest/json-collections</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json-collections&amp;diff=28431"/>
		<updated>2008-08-27T18:58:44Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: list-afied&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JSON Web Collection =  This is a trial balloon for a new format, tentatively dubbed &amp;quot;JSON Web Collections&amp;quot;, with a MIME-type of application/webcoll+json.&lt;br /&gt;
== Fields ==   Every JSON Web Collection is a JSON text, normally an object, and is interpreted as follows:  &lt;br /&gt;
#  A field named &amp;quot;href&amp;quot; is a URI reference for retrieving the collection.  If absent, the collection cannot be retrieved by standardized means. &lt;br /&gt;
# A field named &amp;quot;id&amp;quot; is a URI reference that identifies the collection.  If absent, the collection is ad hoc and has no stable identity. The result from GETting this URI is outside the scope of this standard.  Note that two instances of a collection may have the same &amp;quot;id&amp;quot; but different &amp;quot;href&amp;quot; values if the collection is available from more than one URI. &lt;br /&gt;
# A field named &amp;quot;version&amp;quot; is an opaque string that identifies this version of the collection; any changes to the collection require the version to change.  It may or may not be derived from a timestamp. &lt;br /&gt;
# A field named &amp;quot;type&amp;quot; is a string representing the media type of the members of this collection.  If absent, no type information is available. &lt;br /&gt;
# A field named &amp;quot;members&amp;quot; is an array of objects which represent the resources that are members of the collection.  Each object may have &amp;quot;href&amp;quot;, &amp;quot;id&amp;quot;, &amp;quot;version&amp;quot;, and &amp;quot;type&amp;quot; fields specific to that member. In addition: &lt;br /&gt;
## A field named &amp;quot;value&amp;quot; in a member object is the JSON value that represents the member resource. &lt;br /&gt;
## A field named &amp;quot;precis&amp;quot; in a member object is a JSON value that is related to, but not necessarily the same as, the value that represents the member resource.  It is typically shorter or simpler. &lt;br /&gt;
## A field named &amp;quot;members&amp;quot; in a member object is an array of member objects, and means that the member is itself a collection with the given members.  Note that the type of a member is also a way to specify that it is a collection. &lt;br /&gt;
## Other fields may be present in a member object, but their meanings are not defined by this standard. &lt;br /&gt;
#  Likewise, other fields may be present in a collection object, but their meanings are not defined by this standard. &lt;br /&gt;
#  If the collection is an array of objects, then this array is conceptually the value of the &amp;quot;members&amp;quot; field, and all other fields are unavailable. &lt;br /&gt;
#  If the collection is an array of strings, then the strings represent the &amp;quot;href&amp;quot; fields of the member objects, and all other fields of both member objects and the collection object itself are unavailable.  &lt;br /&gt;
== Remarks == General remark: most of this is fairly boilerplate, but the concept of collections that contain collections in a uniform way is new, and means that we don't need separate mechanisms for service documents or magic ways to create new collections.  A service document is just an ordinary collection of available collections, and adding a new collection is just POSTing to it.  Typically the member objects in a service document would not contain &amp;quot;members&amp;quot; or &amp;quot;value&amp;quot; fields, though they might contain a &amp;quot;precis&amp;quot; field.&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/json-collections&amp;diff=28430</id>
		<title>rest/json-collections</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/json-collections&amp;diff=28430"/>
		<updated>2008-08-27T18:55:54Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: First draft&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= JSON Web Collection =&lt;br /&gt;
&lt;br /&gt;
This is a trial balloon for a new format, tentatively dubbed &amp;quot;JSON Web&lt;br /&gt;
Collections&amp;quot;, with a MIME-type of application/webcoll+json.  Every&lt;br /&gt;
JSON Web Collection is a JSON text, normally an object, and is&lt;br /&gt;
interpreted as follows:&lt;br /&gt;
&lt;br /&gt;
1.  A field named &amp;quot;href&amp;quot; is a URI reference for retrieving the&lt;br /&gt;
collection.  If absent, the collection cannot be retrieved by&lt;br /&gt;
standardized means.&lt;br /&gt;
&lt;br /&gt;
2. A field named &amp;quot;id&amp;quot; is a URI reference that identifies the&lt;br /&gt;
collection.  If absent, the collection is ad hoc and has no stable&lt;br /&gt;
identity. The result from GETting this URI is outside the scope of&lt;br /&gt;
this standard.  Note that two instances of a collection may have the&lt;br /&gt;
same &amp;quot;id&amp;quot; but different &amp;quot;href&amp;quot; values if the collection is available&lt;br /&gt;
from more than one URI.&lt;br /&gt;
&lt;br /&gt;
3. A field named &amp;quot;version&amp;quot; is an opaque string that identifies this&lt;br /&gt;
version of the collection; any changes to the collection require the&lt;br /&gt;
version to change.  It may or may not be derived from a timestamp.&lt;br /&gt;
&lt;br /&gt;
4. A field named &amp;quot;type&amp;quot; is a string representing the media type of the&lt;br /&gt;
members of this collection.  If absent, no type information is&lt;br /&gt;
available.&lt;br /&gt;
&lt;br /&gt;
5. A field named &amp;quot;members&amp;quot; is an array of objects which represent the&lt;br /&gt;
resources that are members of the collection.  Each object may have&lt;br /&gt;
&amp;quot;href&amp;quot;, &amp;quot;id&amp;quot;, &amp;quot;version&amp;quot;, and &amp;quot;type&amp;quot; fields specific to that member.&lt;br /&gt;
In addition:&lt;br /&gt;
&lt;br /&gt;
5a. A field named &amp;quot;value&amp;quot; in a member object is the JSON value that&lt;br /&gt;
represents the member resource.&lt;br /&gt;
&lt;br /&gt;
5b. A field named &amp;quot;precis&amp;quot; in a member object is a JSON value that is&lt;br /&gt;
related to, but not necessarily the same as, the value that represents&lt;br /&gt;
the member resource.  It is typically shorter or simpler.&lt;br /&gt;
&lt;br /&gt;
5c. A field named &amp;quot;members&amp;quot; in a member object is an array of member&lt;br /&gt;
objects, and means that the member is itself a collection with the&lt;br /&gt;
given members.  Note that the type of a member is also a way to&lt;br /&gt;
specify that it is a collection.&lt;br /&gt;
&lt;br /&gt;
5d. Other fields may be present in a member object, but their meanings&lt;br /&gt;
are not defined by this standard.&lt;br /&gt;
&lt;br /&gt;
6.  Likewise, other fields may be present in a collection object, but&lt;br /&gt;
their meanings are not defined by this standard.&lt;br /&gt;
&lt;br /&gt;
7.  If the collection is an array of objects, then this array is&lt;br /&gt;
conceptually the value of the &amp;quot;members&amp;quot; field, and all other fields&lt;br /&gt;
are unavailable.&lt;br /&gt;
&lt;br /&gt;
8.  If the collection is an array of strings, then the strings&lt;br /&gt;
represent the &amp;quot;href&amp;quot; fields of the member objects, and all other&lt;br /&gt;
fields of both member objects and the collection object itself are&lt;br /&gt;
unavailable.&lt;br /&gt;
&lt;br /&gt;
General remark: most of this is fairly boilerplate, but the concept of&lt;br /&gt;
collections that contain collections in a uniform way is new, and&lt;br /&gt;
means that we don't need separate mechanisms for service documents or&lt;br /&gt;
magic ways to create new collections.  A service document is just an&lt;br /&gt;
ordinary collection of available collections, and adding a new&lt;br /&gt;
collection is just POSTing to it.  Typically the member objects in a&lt;br /&gt;
service document would not contain &amp;quot;members&amp;quot; or &amp;quot;value&amp;quot; fields, though&lt;br /&gt;
they might contain a &amp;quot;precis&amp;quot; field.&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/description&amp;diff=31540</id>
		<title>rest/description</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/description&amp;diff=31540"/>
		<updated>2008-01-22T22:20:26Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Proposals/Examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= REST Service Description Conventions (RSDC) =&lt;br /&gt;
&lt;br /&gt;
The general consensus (as articulated by [http://groups.yahoo.com/group/rest-discuss/message/5394 Roy] and [http://groups.yahoo.com/group/rest-discuss/message/5391 Mark], though disputed by [http://groups.yahoo.com/group/rest-discuss/message/5404?threaded=1 others]) is that REST does not need a WSDL-style description language.  After all, we use the web without requiring directions, right?&lt;br /&gt;
&lt;br /&gt;
At the same time, there is still confusion about what actually works, and how.&lt;br /&gt;
&lt;br /&gt;
== Brainstorming ==&lt;br /&gt;
&lt;br /&gt;
In at least the Microformats case (&amp;quot;REX&amp;quot;) where you're assuming a browser, we can presumably get by with the following constraints (in addition to REST itself, of course; e.g., properly-formed URIs):&lt;br /&gt;
&lt;br /&gt;
===REST Service Description Conventions===&lt;br /&gt;
# information is always returned as (X)HTML hypertext&lt;br /&gt;
# inputs are always key-value pairs of strings (except for file uploads)&lt;br /&gt;
#there must be a way to discover all valid queries starting from the base URI&lt;br /&gt;
# forms MUST specify correct actions (e.g., PUT, DELETE), even if the actual implementation uses JavaScript&lt;br /&gt;
plus&lt;br /&gt;
# only hyperlinks that share the same root refer to part of the REST service&lt;br /&gt;
# body text associated with a control/hyperlink provides the human-readable description&lt;br /&gt;
&lt;br /&gt;
=== Sitemaps? ===&lt;br /&gt;
&lt;br /&gt;
Arguably a sitemap is one way of presenting a list of the resources available on particular site, even if it isn't quite the same as a recipe for URL construction (which arguably is more useful in this context).&lt;br /&gt;
&lt;br /&gt;
* [https://www.google.com/webmasters/sitemaps/docs/en/protocol.html Google Sitemap Protocol]&lt;br /&gt;
* [http://www.xml.com/pub/a/2005/04/06/restful.html Constructing vs. Traversing URIs]&lt;br /&gt;
&lt;br /&gt;
:Update - Google's sitemap has now been accepted as an [http://www.sitemaps.org/ industry standard].&lt;br /&gt;
&lt;br /&gt;
== Implementations (Twill) ==&lt;br /&gt;
[http://darcs.idyll.org/%7Et/projects/twill/README.html twill] is a web app testing language by Titus Brown that functions like a smart REST client!&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Twill is especially good at retrieving and submitting web forms. The form-related feature uses the [following] commands:&amp;quot;&lt;br /&gt;
;showforms: shows the forms contained in a web page. Unnamed forms get an ordinal number to use as a form ID &lt;br /&gt;
;formvalue &amp;lt;form_id&amp;gt; &amp;lt;name&amp;gt; &amp;lt;value&amp;gt;: fills a field of the specified form with a given value&lt;br /&gt;
;submit &amp;lt;button_id&amp;gt;: lets you press a Submit button, thus submitting the form&lt;br /&gt;
;formclear &amp;lt;form_id&amp;gt;: resets all the fields in a form&lt;br /&gt;
&lt;br /&gt;
In particular, Twill retrieves information in the following format:&lt;br /&gt;
 &amp;gt;&amp;gt; showforms&lt;br /&gt;
 Form #1&lt;br /&gt;
 ## __Name______ __Type___ __ID________ __Value__________________&lt;br /&gt;
      name         text      (None)&lt;br /&gt;
      password     password  (None)&lt;br /&gt;
      confirm      checkbox  (None)       [] of ['yes']&lt;br /&gt;
      colour       radio     (None)       [] of ['green', 'blue', 'brown', 'ot ...&lt;br /&gt;
      size         select    (None)       ['Medium (10&amp;quot;)'] of ['Tiny (4&amp;quot;)', 'S ...&lt;br /&gt;
      toppings     select    (None)       ['cheese'] of ['cheese', 'pepperoni' ...&lt;br /&gt;
      time         hidden    (None)       1118768019.17&lt;br /&gt;
      1               submit    (None)       Submit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Those comment were extracted from ONLamp's [http://www.onlamp.com/lpt/a/6298 web testing] article, which also discusses:&lt;br /&gt;
;[http://pbp.berlios.de/ Python Browser Poseur (PBP)]: by Cory Dodt (came first)&lt;br /&gt;
;[http://www.crummy.com/software/BeautifulSoup Beautiful Soup]: a third-party HTML parsing tool&lt;br /&gt;
;[http://www.mems-exchange.org/software/quixote/ Quixote]: a nice, small Pythonic web framework&lt;br /&gt;
;John J. Lee's [http://wwwsearch.sourceforge.net/ websearch] tools:mechanize (inspired by Perl), ClientForm, and ClientCookie&lt;br /&gt;
;[http://pyparsing.sourceforge.net/ pyparsing]: object-oriented text processing&lt;br /&gt;
;[http://selenium.thoughtworks.com/index.html Selenium]: JavaScript framework for browser/Plone testing&lt;br /&gt;
;[http://agiletesting.blogspot.com/2005/02/articles-and-tutorials.html Agile Testing] blog: by Grig Gheorghiu.&lt;br /&gt;
&lt;br /&gt;
== Proposals/Examples ==&lt;br /&gt;
* [[rest/microformat-pub-protocol]] by toydi&lt;br /&gt;
* [http://pezra.barelyenough.org/blog/2008/01/restful-service-discovery-and-description/ RESTful Service Discovery and Description]&lt;br /&gt;
* Atom [http://www-128.ibm.com/developerworks/library/x-atompp1/ Service Documents] (was  [http://www.sixapart.com/developers/atom/protocol/atom_introspection.html Introspection])&lt;br /&gt;
** Chapter 8 of the [http://www.ietf.org/internet-drafts/draft-ietf-atompub-protocol-11.txt Atom Publishing Protocol]&lt;br /&gt;
* [http://bitworking.org/rfc/draft-gregorio-07.html#rfc.section.5.1 introspection] in the AtomAPI, by Joe Gregorio&lt;br /&gt;
* [http://www.xml.com/pub/a/2005/04/06/restful.html Constructing or Traversing URIs?] by Joe Gregorio&lt;br /&gt;
* [http://www.ietf.org/internet-drafts/draft-gregorio-uritemplate-00.txt URI Templates] by Joe Gregorio&lt;br /&gt;
* [https://wadl.dev.java.net/ WADL] - Web Application Description Language, by Marc Hadley&lt;br /&gt;
* REST [http://blog.tomayac.de/index.php?date=2007-06-14&amp;amp;time=15:06:52&amp;amp;perma=REST+Describe+%26+Comp.html Describe &amp;amp; Compile] using [http://tomayac.de/rest-describe/latest/RestDescribe.html REST Describe] parser&lt;br /&gt;
* REST Contracts [http://www.innoq.com/blog/st/2007/07/26/governance_and_rest.html and &amp;quot;Governance&amp;quot;]&lt;br /&gt;
* [http://blogs.sun.com/bblfish/entry/restful_semantic_web_services Restful semantic web services] (in the context of [http://en.wikipedia.org/wiki/SPARQL SPARQL])&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=governance&amp;diff=23433</id>
		<title>governance</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=governance&amp;diff=23433"/>
		<updated>2007-10-19T17:51:56Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Administrative intervention */  suspension&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Admins ==&lt;br /&gt;
Any required governance (and very little is required) of the microformats IRC channel, wiki, and mailing lists is discussed by a group of invited volunteer administrators, including:&lt;br /&gt;
* [http://tantek.com/ Tantek Çelik]&lt;br /&gt;
* [http://theryanking.com Ryan King]&lt;br /&gt;
* [http://suda.co.uk/ Brian Suda]&lt;br /&gt;
* [http://siliconllama.com/ Benjamin West]&lt;br /&gt;
* [http://randomchaos.com/ Scott Reynen]&lt;br /&gt;
* [http://fberriman.com/ Frances Berriman]&lt;br /&gt;
* [http://allinthehead.com/ Drew McLellan]&lt;br /&gt;
* [http://kevinmarks.com/ Kevin Marks]&lt;br /&gt;
* [http://adactio.com Jeremy Keith]&lt;br /&gt;
&lt;br /&gt;
Additionally, [[User:Rohit|Rohit Khare]] is an ''ex officio'' observer of microformats-admin, as the contact point for the servers and the domain name.&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
&lt;br /&gt;
Contacting the administration can be done by either joining the microformats [[irc]] channel and stating &amp;quot;adminhelp&amp;quot; to alert an active moderator that you need their attention, or by using the following point of contact for the administration group:&lt;br /&gt;
&lt;br /&gt;
* [http://fberriman.com/ Frances Berriman]  fberriman AT gmail DOT com&lt;br /&gt;
&lt;br /&gt;
''Please note that not all administrators wish to act as points of contact, so please only use those listed.''&lt;br /&gt;
&lt;br /&gt;
At this time, it is felt by the administrators that public access to the admin mailing list is not necessary, on the grounds that frequency of governance related threads on microformats-discuss are low and manageable and can therefore be stated there, and that those wishing to bring up more specific governance issues, personal conflicts etc. would prefer to do so in private and in confidence.  Should the frequency of governance related threads on microformats-discuss increase, then this will be reviewed.&lt;br /&gt;
&lt;br /&gt;
== Administrative intervention ==&lt;br /&gt;
&lt;br /&gt;
Intervention by the administration will be done so only as necessary.  The individuals in this group primarily exist to keep the wiki, IRC and mailing lists orderly (reverting spam, blocking vandalism etc.).  Stronger action will only be taken when a community member acts in direct contradiction to the [[how-to-play]] guidelines.&lt;br /&gt;
&lt;br /&gt;
=== Suspension Policy ===&lt;br /&gt;
&lt;br /&gt;
In extreme cases, the administrators may decide to ban an individual from posting to the mailing list and/or editing the wiki (alternatively, they may require all posts to first be moderated).&lt;br /&gt;
&lt;br /&gt;
This decision is not taken lightly, and will only be done if all the administrators are in agreement with the decision.&lt;br /&gt;
&lt;br /&gt;
Suspensions are usually for a fixed time period, to allow &amp;quot;cooling off.&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
How a suspended/moderated individual can return to good standing will be stated when the action is taken on a case-by-case status.&lt;br /&gt;
&lt;br /&gt;
Appealing an action or decision can be done by using one of the points of contacts mentioned above.&lt;br /&gt;
&lt;br /&gt;
== Issues  ==&lt;br /&gt;
See [[governance-issues]] for suggestions on how to improve governance.&lt;br /&gt;
&lt;br /&gt;
== References  ==&lt;br /&gt;
&lt;br /&gt;
* [http://headrush.typepad.com/creating_passionate_users/2006/04/angrynegative_p.html Angry/negative people can be bad for your brain]&lt;br /&gt;
* [http://www.amazon.com/Asshole-Rule-Civilized-Workplace-Surviving/dp/0446526568 The No A**hole Rule: Building a Civilized Workplace and Surviving One That Isn't ]&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=23004</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=23004"/>
		<updated>2007-10-12T18:47:52Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Client Error */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful] [http://www.softiesonrails.com/2007/4/10/rest-101-part-3-just-call-me-the-repo-man URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Since most browsers do not currently support PUT and DELETE, those methods have to emulated over POST by providing a &amp;quot;_method&amp;quot; parameter with a value of &amp;quot;PUT&amp;quot; and &amp;quot;DELETE&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #23 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://en.wikipedia.org/wiki/List_of_HTTP_status_codes HTTP Response Codes]. Some common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.&lt;br /&gt;
=== Redirection ===&lt;br /&gt;
;303 See Other: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.&lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 14.47]) containing a challenge applicable to the requested resource.&lt;br /&gt;
;404 Not Found: The requested resource could not be found([http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html section 10.4.5]).&lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
; 422 Unprocessable Entity: The server understands the media type of the request entity, but was unable to process the contained instructions.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22485</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22485"/>
		<updated>2007-10-12T18:47:36Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Response Codes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful] [http://www.softiesonrails.com/2007/4/10/rest-101-part-3-just-call-me-the-repo-man URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Since most browsers do not currently support PUT and DELETE, those methods have to emulated over POST by providing a &amp;quot;_method&amp;quot; parameter with a value of &amp;quot;PUT&amp;quot; and &amp;quot;DELETE&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #23 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://en.wikipedia.org/wiki/List_of_HTTP_status_codes HTTP Response Codes]. Some common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.&lt;br /&gt;
=== Redirection ===&lt;br /&gt;
;303 See Other: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.&lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 14.47]) containing a challenge applicable to the requested resource.&lt;br /&gt;
;404 Not Found: The requested resource could not be found([http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html section 10.4.5]).&lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
; 422 Unprocessable Entity: The server understands the media type of the request entity, but was unable to process the&lt;br /&gt;
contained instructions. (Originally defined by [http://tools.ietf.org/html/rfc4918 WebDAV], also used by [http://www.askapache.com/htaccess/apache-status-code-headers-errordocument.html#status-422 Apache])&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22484</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22484"/>
		<updated>2007-10-12T18:47:04Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Client Error */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful] [http://www.softiesonrails.com/2007/4/10/rest-101-part-3-just-call-me-the-repo-man URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Since most browsers do not currently support PUT and DELETE, those methods have to emulated over POST by providing a &amp;quot;_method&amp;quot; parameter with a value of &amp;quot;PUT&amp;quot; and &amp;quot;DELETE&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #23 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html HTTP Response Codes]. Some common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.&lt;br /&gt;
=== Redirection ===&lt;br /&gt;
;303 See Other: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.&lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 14.47]) containing a challenge applicable to the requested resource.&lt;br /&gt;
;404 Not Found: The requested resource could not be found([http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html section 10.4.5]).&lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
; 422 Unprocessable Entity: The server understands the media type of the request entity, but was unable to process the&lt;br /&gt;
contained instructions. (Originally defined by [http://tools.ietf.org/html/rfc4918 WebDAV], also used by [http://www.askapache.com/htaccess/apache-status-code-headers-errordocument.html#status-422 Apache])&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22174</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22174"/>
		<updated>2007-10-02T17:32:19Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Redirection */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful] [http://www.softiesonrails.com/2007/4/10/rest-101-part-3-just-call-me-the-repo-man URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Since most browsers do not currently support PUT and DELETE, those methods have to emulated over POST by providing a &amp;quot;_method&amp;quot; parameter with a value of &amp;quot;PUT&amp;quot; and &amp;quot;DELETE&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #23 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html HTTP Response Codes]. Some common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.&lt;br /&gt;
=== Redirection ===&lt;br /&gt;
;303 See Other: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.&lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html section 14.47]) containing a challenge applicable to the requested resource. &lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22104</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22104"/>
		<updated>2007-10-02T17:32:03Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Successful */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful] [http://www.softiesonrails.com/2007/4/10/rest-101-part-3-just-call-me-the-repo-man URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Since most browsers do not currently support PUT and DELETE, those methods have to emulated over POST by providing a &amp;quot;_method&amp;quot; parameter with a value of &amp;quot;PUT&amp;quot; and &amp;quot;DELETE&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #23 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html HTTP Response Codes]. Some common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation.&lt;br /&gt;
=== Redirection ===&lt;br /&gt;
;303 See Other: The request has succeeded. 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.&lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html section 14.47]) containing a challenge applicable to the requested resource. &lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22103</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22103"/>
		<updated>2007-10-01T16:46:15Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* URL Conventions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful] [http://www.softiesonrails.com/2007/4/10/rest-101-part-3-just-call-me-the-repo-man URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Since most browsers do not currently support PUT and DELETE, those methods have to emulated over POST by providing a &amp;quot;_method&amp;quot; parameter with a value of &amp;quot;PUT&amp;quot; and &amp;quot;DELETE&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #23 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html HTTP Response Codes]. Some common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. &lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html section 14.47]) containing a challenge applicable to the requested resource. &lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22014</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=22014"/>
		<updated>2007-09-28T22:07:59Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Response Codes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Note that most browsers do not currently support PUT and DELETE, so those need to be implemented using a POST with an &amp;quot;?_method=&amp;quot; argument.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #15 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html HTTP Response Codes]. Some common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. &lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html section 14.47]) containing a challenge applicable to the requested resource. &lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21963</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21963"/>
		<updated>2007-09-28T22:06:47Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Examples in the Wild */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Note that most browsers do not currently support PUT and DELETE, so those need to be implemented using a POST with an &amp;quot;?_method=&amp;quot; argument.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #15 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html HTTP Response Codes]. The most common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. &lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html section 14.47]) containing a challenge applicable to the requested resource. &lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
== Ruby ==&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
== Java ==&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
== Python ==&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
== JavaScript ==&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21962</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21962"/>
		<updated>2007-09-28T22:05:50Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Client Error */ reformat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Note that most browsers do not currently support PUT and DELETE, so those need to be implemented using a POST with an &amp;quot;?_method=&amp;quot; argument.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #15 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html HTTP Response Codes]. The most common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. &lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html section 14.47]) containing a challenge applicable to the requested resource. &lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21961</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21961"/>
		<updated>2007-09-28T22:04:49Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Response Codes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Note that most browsers do not currently support PUT and DELETE, so those need to be implemented using a POST with an &amp;quot;?_method=&amp;quot; argument.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #15 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html HTTP Response Codes]. The most common ones are:&lt;br /&gt;
=== Successful ===&lt;br /&gt;
;200 OK: The request has succeeded.&lt;br /&gt;
;201 Created: 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.&lt;br /&gt;
;204 No Content: The server has fulfilled the request but does not need to return an entity-body, and might want to return updated metainformation. &lt;br /&gt;
&lt;br /&gt;
=== Client Error ===&lt;br /&gt;
;400 Bad Request: The request could not be understood by the server due to malformed syntax.&lt;br /&gt;
;401 Unauthorized: The request requires user authentication. The response MUST include a WWW-Authenticate header field ([http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html section 14].47) containing a challenge applicable to the requested resource. &lt;br /&gt;
;405 Method Not Allowed: 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.&lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21960</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21960"/>
		<updated>2007-09-28T21:57:15Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Methods */ link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the [http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html HTTP Verbs] to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics. The primary ones are:&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Note that most browsers do not currently support PUT and DELETE, so those need to be implemented using a POST with an &amp;quot;?_method=&amp;quot; argument.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #15 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html HTTP Response Codes]. &lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21959</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21959"/>
		<updated>2007-09-28T21:56:12Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: methods&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
These are the recommended conventions for [http://bitworking.org/news/How_to_create_a_REST_Protocol RESTful URLs], based on work pioneered by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails] . Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Methods == &lt;br /&gt;
One of the key aspects of REST is using the HTTP Verbs to implement the standard Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]) database semantics.&lt;br /&gt;
&lt;br /&gt;
;POST:'''C'''reate a resource within a given collection&lt;br /&gt;
;GET:'''R'''etrieve a resource&lt;br /&gt;
;PUT:'''U'''pdate a resource&lt;br /&gt;
;DELETE:'''D'''elete a resource&lt;br /&gt;
&lt;br /&gt;
Note that most browsers do not currently support PUT and DELETE, so those need to be implemented using a POST with an &amp;quot;?_method=&amp;quot; argument.&lt;br /&gt;
 &lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
;POST /people/1?_method=DELETE: alias for DELETE, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
;POST /people/1?_method=PUT: alias for PUT, to compensate for browser limitations&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #15 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into CRUD.  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
== Response Codes == &lt;br /&gt;
Another important aspect of REST is returning the appropriate [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html HTTP Response Codes]. &lt;br /&gt;
&lt;br /&gt;
= Examples in the Wild =&lt;br /&gt;
&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
*  [http://developer.37signals.com/highrise/ Highrise]&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21958</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21958"/>
		<updated>2007-09-28T20:17:57Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Routing */ creation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
The recommended conventions for RESTful URLs are those used by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails], as seen in [http://developer.37signals.com/highrise/ Highrise]. Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #15 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return a form for creating a new phone number for the first person &lt;br /&gt;
;POST /people/1/phones/: submit fields for creating a new phone number for the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]).  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
= Implementations =&lt;br /&gt;
&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21952</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21952"/>
		<updated>2007-09-28T20:17:01Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* Follow a Relationship */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
The recommended conventions for RESTful URLs are those used by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails], as seen in [http://developer.37signals.com/highrise/ Highrise]. Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/phones: return the collection of phone numbers associated with the first person&lt;br /&gt;
;GET /people/1/phones/23: return the phone number with id #15 associated with the first person &lt;br /&gt;
;GET /people/1/phones/new: return the phone number with id #15 associated with the first person &lt;br /&gt;
;POST /people/1/phones/: return the phone number with id #15 associated with the first person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]).  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
= Implementations =&lt;br /&gt;
&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21951</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21951"/>
		<updated>2007-09-27T22:56:42Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
The recommended conventions for RESTful URLs are those used by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails], as seen in [http://developer.37signals.com/highrise/ Highrise]. Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/friends: return the collection of friends associated with the first person&lt;br /&gt;
;GET /people/1/friends/1: return the first friend of that person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]).  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;br /&gt;
&lt;br /&gt;
= Implementations =&lt;br /&gt;
&lt;br /&gt;
* [http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;amp;articleId=9020098 Ruby on Rails]&lt;br /&gt;
* [http://weblogs.java.net/blog/bleonard/archive/2007/08/rails_to_java_v.html Java]&lt;br /&gt;
* [http://routes.groovie.org/index.html  Python]&lt;br /&gt;
* [http://giantrobots.thoughtbot.com/2007/4/2/jester-javascriptian-rest Jester] (JavaScript)&lt;br /&gt;
* ....&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21895</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21895"/>
		<updated>2007-09-27T22:48:39Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* File Formats */ mime link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
The recommended conventions for RESTful URLs are those used by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails], as seen in [http://developer.37signals.com/highrise/ Highrise]. Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/friends: return the collection of friends associated with the first person&lt;br /&gt;
;GET /people/1/friends/1: return the first friend of that person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]).  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate [http://en.wikipedia.org/wiki/Internet_media_type MIME type] as an HTTP header, developers are encouraged to follow Rails in allowing extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21891</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21891"/>
		<updated>2007-09-27T22:47:47Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* File Formats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
The recommended conventions for RESTful URLs are those used by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails], as seen in [http://developer.37signals.com/highrise/ Highrise]. Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/friends: return the collection of friends associated with the first person&lt;br /&gt;
;GET /people/1/friends/1: return the first friend of that person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]).  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate mime-type, developers are encouraged to follow Rails in supporting extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
=== HTML ===&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
=== XML ===&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
=== JSON ===&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21889</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21889"/>
		<updated>2007-09-27T22:46:39Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* File Formats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
The recommended conventions for RESTful URLs are those used by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails], as seen in [http://developer.37signals.com/highrise/ Highrise]. Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/friends: return the collection of friends associated with the first person&lt;br /&gt;
;GET /people/1/friends/1: return the first friend of that person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]).  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate mime-type, developers are encouraged to follow Rails in supporting extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
While the JSON mapping should be trivially obvious, the best practice for XML is to:&lt;br /&gt;
# use the column name as the element name&lt;br /&gt;
# include an appropriate &amp;quot;type&amp;quot; field&lt;br /&gt;
&lt;br /&gt;
See the [http://developer.37signals.com/highrise/reference.shtml Highrise reference] for an example of how this works in practice.&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
	<entry>
		<id>https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21888</id>
		<title>rest/urls</title>
		<link rel="alternate" type="text/html" href="https://microformats.org/wiki/index.php?title=rest/urls&amp;diff=21888"/>
		<updated>2007-09-27T22:44:34Z</updated>

		<summary type="html">&lt;p&gt;DrErnie: /* File Formats */ example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= URL Conventions =&lt;br /&gt;
&lt;br /&gt;
The recommended conventions for RESTful URLs are those used by [http://topfunky.com/clients/peepcode/REST-cheatsheet.pdf Ruby on Rails], as seen in [http://developer.37signals.com/highrise/ Highrise]. Following these conventions for both HTTP method names and URL construction will allow your application to be consumed by ActiveResource,  Jester, and other RESTful clients. Note that Rails 1.x used &amp;quot;;edit&amp;quot; and &amp;quot;;new&amp;quot; in place of the simpler &amp;quot;/edit&amp;quot; and &amp;quot;/new&amp;quot; recommended going forward.&lt;br /&gt;
&lt;br /&gt;
== Routing == &lt;br /&gt;
The principal unit of operation is the &amp;quot;collection&amp;quot;, which typically corresponds to a database table or (in Rails) an ActiveRecord class. &lt;br /&gt;
For a collection named &amp;quot;people&amp;quot;, the primary routes would be:&lt;br /&gt;
&lt;br /&gt;
=== Operate on the Collection ===&lt;br /&gt;
;GET /people: return a list of all records&lt;br /&gt;
;GET /people/new: return a form for creating a new record&lt;br /&gt;
;POST /people: submit fields for creating a new record&lt;br /&gt;
&lt;br /&gt;
=== Operate on a Record ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record&lt;br /&gt;
;DELETE /people/1: destroy the first record&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/edit: return a form to edit the first record&lt;br /&gt;
;PUT /people/1: submit fields for updating the first record&lt;br /&gt;
&lt;br /&gt;
=== Follow a Relationship ===&lt;br /&gt;
&lt;br /&gt;
;GET /people/1/friends: return the collection of friends associated with the first person&lt;br /&gt;
;GET /people/1/friends/1: return the first friend of that person&lt;br /&gt;
&lt;br /&gt;
=== Invoke Custom Actions ===&lt;br /&gt;
It isn't always possible to map ''everything'' into Create-Retrieve-Update-Delete ([http://en.wikipedia.org/wiki/Create%2C_read%2C_update_and_delete CRUD]).  Thus, there is also a syntax for specifying custom actions:&lt;br /&gt;
;POST /people/1/promote: run the &amp;quot;promote&amp;quot; action against the first record&lt;br /&gt;
These should be used sparingly, as they are unlikely to be supported by most clients.&lt;br /&gt;
&lt;br /&gt;
== File Formats == &lt;br /&gt;
&lt;br /&gt;
Data types are extremely important in REST.  While it is ideal to specify the appropriate mime-type, developers are encouraged to follow Rails in supporting extension-based typing, e.g.:&lt;br /&gt;
&lt;br /&gt;
;GET /people/1: return the first record in HTML format&lt;br /&gt;
;GET /people/1.html: return the first record in HTML format&lt;br /&gt;
;GET /people/1.xml: return the first record in [http://en.wikipedia.org/wiki/XML XML] format&lt;br /&gt;
;GET /people/1.json: return the first record in [http://en.wikipedia.org/wiki/JSON JSON] format&lt;br /&gt;
&lt;br /&gt;
Best practice is to use the column name as the element name, include an appropriate &amp;quot;type&amp;quot; field, as in [http://developer.37signals.com/highrise/reference.shtml Highrise]:&lt;/div&gt;</summary>
		<author><name>DrErnie</name></author>
	</entry>
</feed>