<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mediagoblin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nyergler</id>
	<title>GNU MediaGoblin Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mediagoblin.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nyergler"/>
	<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/Special:Contributions/Nyergler"/>
	<updated>2026-04-20T00:26:56Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=536</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=536"/>
		<updated>2012-02-04T22:05:39Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* Implementation Thoughts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). &lt;br /&gt;
&lt;br /&gt;
When authorization is required, a User MUST authorize the CA using a supported authorization method. What authorization methods are supported is unspecified at this point. HTTP Basic is easy, OAuth2 feels like a better choice (and will require more work).&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests MUST specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, will send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields MUST be query string encoded as the request body. When uploading media, the request MUST be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
Client applications MUST specify a User-Agent which identifies the client and provides a URL where information about the client can be found. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;User-Agent: MediaGoblin for Android v0.0.0.0.1 (http://mediagoblin.org/android)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
PUT: Update the user&#039;s information. &lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element MUST include a title, creation date, edit date, and canonical URL for the resource. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages SHOULD also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
POST: Upload a new media item for this user. The response MUST contain the Location: header, which is the URI for the new resource.&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
HEAD: Retrieve minimal metadata about the media&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media&lt;br /&gt;
&lt;br /&gt;
PUT: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
* gallery (location for retrieving a list of media resources)&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (GET specific; URI of the media file)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* Views may be built as classes, with method conventions for specific response types (GET).&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* http://blog.steveklabnik.com/2011/07/03/nobody-understands-rest-or-http.html&lt;br /&gt;
* http://blog.steveklabnik.com/2011/08/07/some-people-understand-rest-and-http.html&lt;br /&gt;
* http://stackoverflow.com/questions/1619152/how-to-create-rest-urls-without-verbs/1619677#1619677&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=535</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=535"/>
		<updated>2012-02-04T22:03:31Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* Further Reading */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). &lt;br /&gt;
&lt;br /&gt;
When authorization is required, a User MUST authorize the CA using a supported authorization method. What authorization methods are supported is unspecified at this point. HTTP Basic is easy, OAuth2 feels like a better choice (and will require more work).&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests MUST specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, will send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields MUST be query string encoded as the request body. When uploading media, the request MUST be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
Client applications MUST specify a User-Agent which identifies the client and provides a URL where information about the client can be found. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;User-Agent: MediaGoblin for Android v0.0.0.0.1 (http://mediagoblin.org/android)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
PUT: Update the user&#039;s information. &lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element MUST include a title, creation date, edit date, and canonical URL for the resource. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages SHOULD also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
POST: Upload a new media item for this user. The response MUST contain the Location: header, which is the URI for the new resource.&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
HEAD: Retrieve minimal metadata about the media&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media&lt;br /&gt;
&lt;br /&gt;
PUT: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
* gallery (location for retrieving a list of media resources)&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (GET specific; URI of the media file)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* http://blog.steveklabnik.com/2011/07/03/nobody-understands-rest-or-http.html&lt;br /&gt;
* http://blog.steveklabnik.com/2011/08/07/some-people-understand-rest-and-http.html&lt;br /&gt;
* http://stackoverflow.com/questions/1619152/how-to-create-rest-urls-without-verbs/1619677#1619677&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=534</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=534"/>
		<updated>2012-02-04T22:03:06Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). &lt;br /&gt;
&lt;br /&gt;
When authorization is required, a User MUST authorize the CA using a supported authorization method. What authorization methods are supported is unspecified at this point. HTTP Basic is easy, OAuth2 feels like a better choice (and will require more work).&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests MUST specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, will send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields MUST be query string encoded as the request body. When uploading media, the request MUST be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
Client applications MUST specify a User-Agent which identifies the client and provides a URL where information about the client can be found. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;User-Agent: MediaGoblin for Android v0.0.0.0.1 (http://mediagoblin.org/android)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
PUT: Update the user&#039;s information. &lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element MUST include a title, creation date, edit date, and canonical URL for the resource. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages SHOULD also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
POST: Upload a new media item for this user. The response MUST contain the Location: header, which is the URI for the new resource.&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
HEAD: Retrieve minimal metadata about the media&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media&lt;br /&gt;
&lt;br /&gt;
PUT: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
* gallery (location for retrieving a list of media resources)&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (GET specific; URI of the media file)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* http://blog.steveklabnik.com/2011/07/03/nobody-understands-rest-or-http.html&lt;br /&gt;
* http://blog.steveklabnik.com/2011/08/07/some-people-understand-rest-and-http.html&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=533</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=533"/>
		<updated>2012-02-04T22:01:57Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* Supported Endpoints */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). &lt;br /&gt;
&lt;br /&gt;
When authorization is required, a User must authorize the CA using a supported authorization method. What authorization methods are supported is unspecified at this point. HTTP Basic is easy, OAuth2 feels like a better choice (and will require more work).&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests should specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields should be query string encoded as the POST body. When uploading media, the request should be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
Client applications MUST specify a User-Agent which identifies the client and provides a URL where information about the client can be found. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;User-Agent: MediaGoblin for Android v0.0.0.0.1 (http://mediagoblin.org/android)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
PUT: Update the user&#039;s information. &lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element MUST include a title, creation date, edit date, and canonical URL for the resource. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages SHOULD also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
POST: Upload a new media item for this user. The response MUST contain the Location: header, which is the URI for the new resource.&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
HEAD: Retrieve minimal metadata about the media&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media&lt;br /&gt;
&lt;br /&gt;
PUT: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
* gallery (location for retrieving a list of media resources)&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (GET specific; URI of the media file)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* http://blog.steveklabnik.com/2011/07/03/nobody-understands-rest-or-http.html&lt;br /&gt;
* http://blog.steveklabnik.com/2011/08/07/some-people-understand-rest-and-http.html&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=532</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=532"/>
		<updated>2012-02-04T21:56:19Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). &lt;br /&gt;
&lt;br /&gt;
When authorization is required, a User must authorize the CA using a supported authorization method. What authorization methods are supported is unspecified at this point. HTTP Basic is easy, OAuth2 feels like a better choice (and will require more work).&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests should specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields should be query string encoded as the POST body. When uploading media, the request should be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
Client applications MUST specify a User-Agent which identifies the client and provides a URL where information about the client can be found. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;User-Agent: MediaGoblin for Android v0.0.0.0.1 (http://mediagoblin.org/android)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
POST: Update the user&#039;s information&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element includes a title, creation date, edit date, and canonical URL for the media resource. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages should also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
PUT: Upload a new media item for this user. The response will contain the Location: header, which is the URI for the new resource.&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media, including URIs for media files.&lt;br /&gt;
&lt;br /&gt;
POST: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
* gallery (location for retrieving a list of media resources)&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (GET specific; URI of the media file)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* http://blog.steveklabnik.com/2011/07/03/nobody-understands-rest-or-http.html&lt;br /&gt;
* http://blog.steveklabnik.com/2011/08/07/some-people-understand-rest-and-http.html&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=406</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=406"/>
		<updated>2011-11-14T01:31:07Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). When authorization is required, a User must authorize the CA using a supported authorization method. What authorization methods are supported is unspecified at this point. HTTP Basic is easy, OAuth2 feels like a better choice (and will require more work).&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests should specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields should be query string encoded as the POST body. When uploading media, the request should be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
Client applications MUST specify a User-Agent which identifies the client and provides a URL where information about the client can be found. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;User-Agent: MediaGoblin for Android v0.0.0.0.1 (http://mediagoblin.org/android)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
POST: Update the user&#039;s information&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element includes a title, creation date, edit date, and canonical URL for the media resource. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages should also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
PUT: Upload a new media item for this user. The response will contain the Location: header, which is the URI for the new resource.&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media, including URIs for media files.&lt;br /&gt;
&lt;br /&gt;
POST: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
* gallery (location for retrieving a list of media resources)&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (GET specific; URI of the media file)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* http://blog.steveklabnik.com/2011/07/03/nobody-understands-rest-or-http.html&lt;br /&gt;
* http://blog.steveklabnik.com/2011/08/07/some-people-understand-rest-and-http.html&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=405</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=405"/>
		<updated>2011-11-14T01:27:28Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). When authorization is required, a User must authorize the CA using a supported authorization method. OAuth2 should be considered a baseline.&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests should specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields should be query string encoded as the POST body. When uploading media, the request should be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
POST: Update the user&#039;s information&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element includes a title, creation date, edit date, and canonical URL for the media resource. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages should also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
PUT: Upload a new media item for this user. The response will contain the Location: header, which is the URI for the new resource.&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media, including URIs for media files.&lt;br /&gt;
&lt;br /&gt;
POST: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
* gallery (location for retrieving a list of media resources)&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (GET specific; URI of the media file)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;br /&gt;
&lt;br /&gt;
== Further Reading ==&lt;br /&gt;
&lt;br /&gt;
* http://blog.steveklabnik.com/2011/07/03/nobody-understands-rest-or-http.html&lt;br /&gt;
* http://blog.steveklabnik.com/2011/08/07/some-people-understand-rest-and-http.html&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=404</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=404"/>
		<updated>2011-11-14T01:19:31Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* /u//gallery/ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). When authorization is required, a User must authorize the CA using a supported authorization method. OAuth2 should be considered a baseline.&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests should specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields should be query string encoded as the POST body. When uploading media, the request should be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
POST: Update the user&#039;s information&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element includes a title, creation date, edit date, and canonical URL for the media resource. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages should also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
PUT: Upload a new media item for this user. The response will contain the Location: header, which is the URI for the new resource.&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media, including URIs for media files.&lt;br /&gt;
&lt;br /&gt;
POST: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
* gallery (location for retrieving a list of media resources)&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (GET specific; URI of the media file)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=403</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=403"/>
		<updated>2011-11-14T01:18:45Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* Media */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). When authorization is required, a User must authorize the CA using a supported authorization method. OAuth2 should be considered a baseline.&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests should specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields should be query string encoded as the POST body. When uploading media, the request should be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
POST: Update the user&#039;s information&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element includes a title, creation date, edit date, and canonical URL for the media resource. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages should also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
PUT: Upload a new media item for this user&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media, including URIs for media files.&lt;br /&gt;
&lt;br /&gt;
POST: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
* gallery (location for retrieving a list of media resources)&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (GET specific; URI of the media file)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=402</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=402"/>
		<updated>2011-11-14T01:16:30Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* User */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). When authorization is required, a User must authorize the CA using a supported authorization method. OAuth2 should be considered a baseline.&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests should specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields should be query string encoded as the POST body. When uploading media, the request should be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
POST: Update the user&#039;s information&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element includes a title, creation date, edit date, and canonical URL for the media resource. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages should also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
PUT: Upload a new media item for this user&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media, including URIs for media files.&lt;br /&gt;
&lt;br /&gt;
POST: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
* gallery (location for retrieving a list of media resources)&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (URL of the media)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=401</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=401"/>
		<updated>2011-11-14T01:15:42Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* /u//gallery/ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). When authorization is required, a User must authorize the CA using a supported authorization method. OAuth2 should be considered a baseline.&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests should specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields should be query string encoded as the POST body. When uploading media, the request should be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
POST: Update the user&#039;s information&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element includes a title, creation date, edit date, and canonical URL for the media resource. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages should also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
PUT: Upload a new media item for this user&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media, including URIs for media files.&lt;br /&gt;
&lt;br /&gt;
POST: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (URL of the media)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=400</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=400"/>
		<updated>2011-11-14T01:15:25Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* Gallery */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). When authorization is required, a User must authorize the CA using a supported authorization method. OAuth2 should be considered a baseline.&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests should specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields should be query string encoded as the POST body. When uploading media, the request should be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
POST: Update the user&#039;s information&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element includes a title, creation date, edit date, and canonical URL for the media. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages should also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
PUT: Upload a new media item for this user&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media, including URIs for media files.&lt;br /&gt;
&lt;br /&gt;
POST: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** created&lt;br /&gt;
** edited&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (URL of the media)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=399</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=399"/>
		<updated>2011-11-14T01:15:02Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: /* Supported Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). When authorization is required, a User must authorize the CA using a supported authorization method. OAuth2 should be considered a baseline.&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests should specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields should be query string encoded as the POST body. When uploading media, the request should be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
POST: Update the user&#039;s information&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element includes a title, creation date, edit date, and canonical URL for the media. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages should also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
PUT: Upload a new media item for this user&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media, including URIs for media files.&lt;br /&gt;
&lt;br /&gt;
POST: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
&lt;br /&gt;
=== Gallery ===&lt;br /&gt;
&lt;br /&gt;
* media-item&lt;br /&gt;
** location&lt;br /&gt;
** title&lt;br /&gt;
** description&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (URL of the media)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=398</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=398"/>
		<updated>2011-11-14T01:14:00Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). When authorization is required, a User must authorize the CA using a supported authorization method. OAuth2 should be considered a baseline.&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
Requests should specify the HTTP Accept header to indicate the preferred response format. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
When updating or creating resources, fields should be query string encoded as the POST body. When uploading media, the request should be a multipart request, with the metadata and file both provided.&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
POST: Update the user&#039;s information&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element includes a title, creation date, edit date, and canonical URL for the media. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages should also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
PUT: Upload a new media item for this user&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media, including URIs for media files.&lt;br /&gt;
&lt;br /&gt;
POST: Update the media item, possibly updating the metadata or replacing the media file.&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
== Supported Properties ==&lt;br /&gt;
&lt;br /&gt;
The following properties are &amp;quot;keys&amp;quot; which can be looked for when retrieving a resource, or specified when updating or creating one. Additional properties may be present when retrieving resources, and Client Applications MUST NOT consider their presence an error state.&lt;br /&gt;
&lt;br /&gt;
=== User ===&lt;br /&gt;
&lt;br /&gt;
* username&lt;br /&gt;
* email&lt;br /&gt;
* biography&lt;br /&gt;
* website&lt;br /&gt;
&lt;br /&gt;
=== Media ===&lt;br /&gt;
&lt;br /&gt;
* title&lt;br /&gt;
* created&lt;br /&gt;
* updated&lt;br /&gt;
* description&lt;br /&gt;
* owner &lt;br /&gt;
* resource (URL of the media)&lt;br /&gt;
&lt;br /&gt;
== Implementation Thoughts ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=397</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=397"/>
		<updated>2011-11-14T01:08:30Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a [https://secure.wikimedia.org/wikipedia/en/wiki/REST REST] API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
Clients access MediaGoblin Servers (MGS) using HTTP to retrieve, upload, and update media. Some operations are available to unauthenticated users (for example, getting media details in a default configuration). Others require that the User authorize the client application (CA). When authorization is required, a User must authorize the CA using a supported authorization method. OAuth2 should be considered a baseline.&lt;br /&gt;
&lt;br /&gt;
=== Requests ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Responses ===&lt;br /&gt;
&lt;br /&gt;
Response format is determined by the HTTP Accept header. A client that wishes to receive a JSON-formatted response, for example, should send the header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Accept: application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Initially MGS will support JSON, but other formats such as YAML, XML, or RDF may be added.&lt;br /&gt;
&lt;br /&gt;
== Supported Endpoints ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of URL endpoints which should support content negotiation for the purposes of supporting non-browser client applications. HTTP verbs other than those listed will return HTTP 405 (method not supported).&lt;br /&gt;
&lt;br /&gt;
=== /u/&amp;lt;username&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
GET: Return information about the user, including website and bio.&lt;br /&gt;
&lt;br /&gt;
POST: Update the user&#039;s information XXX&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/gallery/===&lt;br /&gt;
&lt;br /&gt;
GET: Return a list of media owned by the user. Each returned element includes a title, creation date, edit date, and canonical URL for the media. If more than a single &amp;quot;page&amp;quot; is available, the &amp;lt;code&amp;gt;Link:&amp;lt;/code&amp;gt; header SHOULD be provided with &amp;lt;code&amp;gt;rel=&amp;quot;next&amp;quot;&amp;lt;/code&amp;gt;. Subsequent pages should also include a &amp;lt;code&amp;gt;rel=&amp;quot;prev&amp;quot;&amp;lt;/code&amp;gt; link, to allow for navigation.&lt;br /&gt;
&lt;br /&gt;
PUT: Upload a new media item for this user XXX&lt;br /&gt;
&lt;br /&gt;
===/u/&amp;lt;username&amp;gt;/m/&amp;lt;slug&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
GET: Retrieve the full metadata about the media, including URIs for media files.&lt;br /&gt;
&lt;br /&gt;
POST: Update the media item, possibly updating the metadata or replacing the media file. XXX&lt;br /&gt;
&lt;br /&gt;
DELETE: Delete the media item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Implementation Ideas ==&lt;br /&gt;
&lt;br /&gt;
* HTTP verb based dispatch wrappers for views would allow us to map different verbs to different views.&lt;br /&gt;
* Codec classes for encoding/decoding; see [https://docs.djangoproject.com/en/1.3/topics/serialization/ Django Serializers] for inspiration.&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
	<entry>
		<id>https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=396</id>
		<title>REST API</title>
		<link rel="alternate" type="text/html" href="https://wiki.mediagoblin.org/index.php?title=REST_API&amp;diff=396"/>
		<updated>2011-11-14T00:25:11Z</updated>

		<summary type="html">&lt;p&gt;Nyergler: Created page with &amp;quot;This document is a draft describing a REST API for interacting with MediaGoblin servers.  == Principles ==  * Leverage HTTP where possible * Allow clients to &amp;quot;follow their nose&amp;quot; ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document is a draft describing a REST API for interacting with MediaGoblin servers.&lt;br /&gt;
&lt;br /&gt;
== Principles ==&lt;br /&gt;
&lt;br /&gt;
* Leverage HTTP where possible&lt;br /&gt;
* Allow clients to &amp;quot;follow their nose&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
== Media ==&lt;br /&gt;
&lt;br /&gt;
=== Retrieving ===&lt;br /&gt;
&lt;br /&gt;
=== Uploading ===&lt;/div&gt;</summary>
		<author><name>Nyergler</name></author>
	</entry>
</feed>