#summary Url scheme in melange
#labels Contents-Skeleton

= URLs in Melange =

== What does a URL look like? ==
  
 Example: hostname/*gsoc*/*homepage*/*google*/*gsoc2013*

  * The first path component is considered the “module” (examples are /gsoc, /gci, /tasks)
    * */gsoc* are the Google Summer of Code related urls
    * */gci* are the Google Code-in related urls
    * */tasks* are all the Google Appengine TaskQueue related URLs, these are followed by another component to indicate which module they belong to. All urls starting with /tasks can only be hit by a AppEngine developer or an internal AppEngine generated request.
  * Second is “component”, this indicates the different items and concepts in Melange. This component might consist out of multiple parts. Examples are:
    * */dashboard* the dashboard for users
    * */home* the homepage of the program
    * */document* any documents in the program
    * */admin* the administration pages for Hosts
    * */org/application* organization applications
  * Third is “function” or “action”, (sometimes omitted) (“edit”, “show”, “create”, “update”)
    * Under what conditions does this appear? If it’s a document, “edit” and “show” will probably appear... but there’s not really consistent criteria
  * Fourth path component is ID, keyname, or enough of the key name to unambiguously identify the viewed entity prefixed by /<sponsor>/<program>.
  * Common patterns live in url_patterns.py
  * Get parameters are used for things like telling the user that their form was saved correctly
  * GCI uses Get parameters to determine action in task view.
  * URLs are registered with DjangoUrlPatterns during frontend instantiation
  * See each module’s callback.py module
  * MapReduces live at some /_ah/mapreduce “special” url.
  * AppEngine ensures that only app developers can reach those urls.