

# 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
Melange knows three module components:
  1. gsoc, Google Summer of Code programs
  1. gci, Google Code-In programs
  1. core, general site-wide configuration and pages are handled here. Core pages do not have a module component in the url.


## 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.