#summary Url scheme in melange
#labels Contents-Skeleton

<wiki:toc max_depth="2" />

= What does a URL look like? =
  
 Example: /*gsoc*/*org*/*home*/*google*/*gsoc2013*/*melange*

  * The first path component is considered the “module”, some examples.
    * */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”, such as
    * */edit*
    * */show*
    * */create*
    * */update*
  * Fourth path component is ID, keyname, or enough of the key name to unambiguously identify the viewed entity. E.g.
    * */google/gsoc2013/melange*

== Module Component ==

== Components component ==

== Action component ==
    * Under what conditions does function/action appear? If it’s a document, “edit” and “show” will probably appear... but there’s not really consistent criteria

== Identifier component ==

= How to define a URL in the code? =
  * Common patterns live in url_patterns.py
  * URLs are registered with DjangoUrlPatterns during frontend instantiation
  * See each module’s callback.py module

= Conventions around GET parameters =
  * 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.


