Changes

Line 17: Line 17:       −
== Progress ==
+
== REST API v1 Resources ==
<br />
     −
At the moment , I am aiming to get a basic set of features that a Social site like this should offer.So the first phase deals with developing a minimal functional site that offers basic set of social networking features and Project sharing capabilities.
+
==== User Creation ====
 +
{| class="wikitable"
 +
|-
 +
! Resource !! Description
 +
|-
 +
| POST /api/v1/register/  ||  Makes http POST request with the JSON data to create a new user in the database ,if a user already exist raises HTTP 400 badrequest and returns a Json response  with error message "the  username already exist" . Returns HTTP 201 for successfully Created User
 +
|-
 +
| Example || curl --dump-header - -H "Content-Type:application/json" -X POST --data '{"username" :"user101" , "email" :"user@mail.com" , "password" : "password" }'  http://moksaya-rahulgaur.rhcloud.com/api/v1/register/
 +
|-
 +
| Response ||  HTTP/1.1 201 CREATED Date: Thu, 19 Sep 2013 23:49:52 GMT Server: Apache/2.2.15 (Red Hat) Vary: Accept,Accept-Language,Cookie X-Frame-Options: SAMEORIGIN Content-Language: en-us Location:http://moksaya-rahulgaur.rhcloud.com/api/v1/register/19/
 +
Content-Length: 0
 +
Content-Type: text/html; charset=utf-8
 +
|}
 +
 
 +
==== Authentication and User Login ====
 +
 
 +
Requires Username and Password for obtaining the api_keys , and rest of the other resources are accessed with the API Keys.
 +
There are two ways to do it, these are Publicly accessible end points.
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Resource  !! Description
 +
|-
 +
| GET /api/v1/token/auth/  ||  Returns the apikey for the requested user, we need to supply the username and password in the request headers .
 +
|-
 +
| Example || curl -k --user "aregee:notebook" http://moksaya-rahulgaur.rhcloud.com/api/v1/token/auth/
 +
|-
 +
| Response || {
 +
    "key": "531ffb6152171df4f60b1b09f09dd1b4c5aba997"
 +
}
 +
 
 +
|-
 +
| POST /api/v1/user/login/  || Another way is to POST the user credentials as a JSON data to this end point and returns User Resource with the API_key . Raises HTTP 401 for unauthorized with error response
 +
|-
 +
| Example ||  curl --dump-header - -H "Content-Type:application/json" -X POST --data '{"username":"user101","password":"notebook" }' http://moksaya-rahulgaur.rhcloud.com/api/v1/user/login/
 +
|-
 +
| Response || HTTP/1.1 200 OK
 +
Date: Fri, 20 Sep 2013 22:16:20 GMT
 +
Server: Apache/2.2.15 (Red Hat)
 +
Vary: Accept,Accept-Language,Cookie,Accept-Encoding
 +
X-Frame-Options: SAMEORIGIN
 +
Content-Language: en-us
 +
Content-Type: application/json
 +
Set-Cookie: sessionid=ddb4289b9fe8b2a963bfc540f81559c3; expires=Fri, 04-Oct-2013 22:16:20 GMT; httponly; Max-Age=1209600; Path=/
 +
Transfer-Encoding: chunked
 +
 
 +
{
 +
    "apikey": "03f9a40ddd029b0a773a54f189aaa92d5a07c2d2",
 +
    "email": "user@mail.com",
 +
    "first_name": "",
 +
    "id": 14,
 +
    "last_name": "",
 +
    "resource_uri": "/api/v1/user/14/",
 +
    "username": "user101"
 +
}
 +
 
 +
|}
 +
 
 +
==== User Resource ====
 +
Authenticated users can access the User Resource , with the api_key and User Resource supports following authenticated  options
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Resource !! Description
 +
|-
 +
| GET /api/v1/user/ || Returns the list of all user accounts when accessed with authenticated header but returns requested user's resource when username and api_key supplied in url parameters
 +
|-
 +
| Example ||  curl --dump-header - -H "Content-Type: application/json" -X GET http://moksaya-rahulgaur.rhcloud.com/api/v1/user/?username=akshit\&api_key=feea1175cdb9dde076eb68b5d83857fe2a58a186
 +
|-
 +
| Response || HTTP/1.1 200 OK
 +
Date: Fri, 20 Sep 2013 22:32:23 GMT
 +
Server: Apache/2.2.15 (Red Hat)
 +
Vary: Accept,Accept-Language,Cookie,Accept-Encoding
 +
X-Frame-Options: SAMEORIGIN
 +
Content-Language: en-us
 +
Cache-Control: no-cache
 +
Content-Type: application/json
 +
Transfer-Encoding: chunked
 +
 
 +
{
 +
    "meta": {
 +
        "limit": 20,
 +
        "next": null,
 +
        "offset": 0,
 +
        "previous": null,
 +
        "total_count": 1
 +
    },
 +
    "objects": [
 +
        {
 +
            "apikey": "feea1175cdb9dde076eb68b5d83857fe2a58a186",
 +
            "email": "user@mail.com",
 +
            "first_name": "",
 +
            "id": 19,
 +
            "last_name": "",
 +
            "resource_uri": "/api/v1/user/19/",
 +
            "username": "akshit"
 +
        }
 +
    ]
 +
}
 +
|-
 +
| GET /api/v1/user/<username>/  || We can also access users with their respective usernames and returns HTTP 401 for resource not found
 +
|-
 +
| Example || curl --dump-header - -H "Content-Type: application/json" -X GET http://moksaya-rahulgaur.rhcloud.com/api/v1/user/aregee/?username=spock\&api_key=d2fe32b15b0b395a5d0e0ea4b7eb1e5d6ea15de7
 +
|-
 +
| Response || HTTP/1.1 200 OK
 +
Date: Fri, 20 Sep 2013 23:05:43 GMT
 +
Server: Apache/2.2.15 (Red Hat)
 +
Vary: Accept,Accept-Language,Cookie,Accept-Encoding
 +
X-Frame-Options: SAMEORIGIN
 +
Content-Language: en-us
 +
Cache-Control: no-cache
 +
Content-Type: application/json
 +
Transfer-Encoding: chunked
 +
 
 +
{
 +
    "apikey": "531ffb6152171df4f60b1b09f09dd1b4c5aba997",
 +
    "email": "iamaregee@gmail.com",
 +
    "first_name": "",
 +
    "id": 2,
 +
    "last_name": "",
 +
    "resource_uri": "/api/v1/user/2/",
 +
    "username": "aregee"
 +
}
 +
|-
 +
| DELETE /api/v1/user/<username>/ || Removes the requested <username> from the database .
 +
|-
 +
| Example ||  curl --dump-header - -H "Content-Type: application/json" -X DELETE  http://moksaya-rahulgaur.rhcloud.com/api/v1/user/akshit/?username=akshit\&api_key=feea1175cdb9dde076eb68b5d83857fe2a58a186
 +
|-
 +
| Response || HTTP/1.1 204 NO CONTENT
 +
Date: Fri, 20 Sep 2013 22:36:22 GMT
 +
Server: Apache/2.2.15 (Red Hat)
 +
Vary: Accept,Accept-Language,Cookie
 +
X-Frame-Options: SAMEORIGIN
 +
Content-Language: en-us
 +
Content-Length: 0
 +
Content-Type: text/html; charset=utf-8
 +
 
 +
|}
 +
 
 +
 
 +
==== Profile Resource ====
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Resource !! Description
 +
|-
 +
| POST /api/v1/profile/ || Making http post to this end  point with the json data containing the Profile fields creates a new user profile , which is Related to all the other resources.Returns HTTP 201 response for successfully created user profile , returns HTTP 400 bad request with error response for unsuccessful attempts. 
 +
|-
 +
| Example || curl --dump-header - -H "Content-Type:application/json" -X POST --data '{"user":"/api/v1/user/akshit/" , "about_me" :"Profile Create with CURL"}'  http://moksaya-rahulgaur.rhcloud.com/api/v1/profile/?username=akshit\&api_key=feea1175cdb9dde076eb68b5d83857fe2a58a186
 +
|-
 +
| GET /api/v1/profile/ || Returns list of all user profiles , throttles twenty results per request.
 +
|-
 +
| GET /api/v1/profile/username/ || Returns ProfileResource for the requested user , returns http 404 if resource is not found.
 +
|-
 +
| Example || curl --dump-header - -H "Content-Type:application/json" -X GET http://moksaya-rahulgaur.rhcloud.com/api/v1/profile/akshit/?username=akshit\&api_key=feea1175cdb9dde076eb68b5d83857fe2a58a186
 +
|-
 +
| Respone || HTTP/1.1 200 OK
 +
Date: Thu, 19 Sep 2013 23:56:13 GMT
 +
Server: Apache/2.2.15 (Red Hat)
 +
Vary: Accept,Accept-Language,Cookie,Accept-Encoding
 +
X-Frame-Options: SAMEORIGIN
 +
Content-Language: en-us
 +
Cache-Control: no-cache
 +
Content-Length: 279
 +
Content-Type: application/json
 +
 
 +
{
 +
    "about_me": "Profile Create with CURL",
 +
    "followers": [],
 +
    "following": [],
 +
    "id": 19,
 +
    "language": "en",
 +
    "location": "",
 +
    "mugshot": null,
 +
    "privacy": "registered",
 +
    "projects": [],
 +
    "resource_uri": "/api/v1/profile/19/",
 +
    "user": "akshit"
 +
}
 +
|-
 +
| PUT /api/v1/profile/<username>/  || Updates the Profile Resource field with the supplied JSON data.Currently works with only about_me field but can be extended to include location and mugshot or Avatar fields
 +
|-
 +
| Example || curl --dump-header - -H "Content-Type:application/json" -X PUT --data '{"about_me" :"Profile Create & updated with  CURL "}'  http://moksaya-rahulgaur.rhcloud.com/api/v1/profile/akshit/?username=akshit\&api_key=feea1175cdb9dde076eb68b5d83857fe2a58a186
 +
|-
 +
|}
 +
 
 +
 
 +
==== Project Resource ====
 +
 
 +
{| class="wikitable"
 +
|-
 +
! Resource  !!  Description
 +
|-
 +
| GET /api/v1/projects/ || Following query returns the list of all the projects submitted by the user.
 +
|-
 +
| GET /api/v1/projects/<id>/ || We can query a particular project with its id. This would return ProjectResource for the requested project id.It also shows related comments and likes on the project.
 +
|-
 +
| Example || curl --dump-header - -H "Content-Type: application/json" -X GET http://moksaya-rahulgaur.rhcloud.com/api/v1/projects/1/?username=spock\&api_key=d2fe32b15b0b395a5d0e0ea4b7eb1e5d6ea15de7
 
   
 
   
 +
|-
 +
 +
| Response  || HTTP/1.1 200 OK
 +
Date: Fri, 20 Sep 2013 23:40:38 GMT
 +
Server: Apache/2.2.15 (Red Hat)
 +
Vary: Accept,Accept-Language,Cookie,Accept-Encoding
 +
X-Frame-Options: SAMEORIGIN
 +
Content-Language: en-us
 +
Cache-Control: no-cache
 +
Content-Type: application/json
 +
Transfer-Encoding: chunked
 +
 +
{
 +
    "Likes": 6,
 +
    "comment": [
 +
        {
 +
            "entry": "This is My Project",
 +
            "resource_uri": "/api/v1/comment/3/",
 +
            "text": "This is a Comment :)",
 +
            "user": "aregee"
 +
        },
 +
        {
 +
            "entry": "This is My Project",
 +
            "resource_uri": "/api/v1/comment/8/",
 +
            "text": "Lets Post another Comment here :D",
 +
            "user": "aregee"
 +
        },
 +
        {
 +
            "entry": "This is My Project",
 +
            "resource_uri": "/api/v1/comment/9/",
 +
            "text": "But This Kinda Looks Sweet :D",
 +
            "user": "aregee"
 +
        },
 +
        {
 +
            "entry": "This is My Project",
 +
            "resource_uri": "/api/v1/comment/29/",
 +
            "text": "superb :)",
 +
            "user": "nikking1793"
 +
        },
 +
        {
 +
            "entry": "This is My Project",
 +
            "resource_uri": "/api/v1/comment/30/",
 +
            "text": "superb :)",
 +
            "user": "nikking1793"
 +
        }
 +
    ],
 +
    "desc": "Hello Project world",
 +
    "history": "",
 +
    "id": 1,
 +
    "resource_uri": "/api/v1/projects/1/",
 +
    "screenshot": "/media/projects/lin.jpg",
 +
    "shared_date": "2013-09-17T16:44:53.773919",
 +
    "src": "/media/projects/try.py",
 +
    "title": "This is My Project",
 +
    "user": "aregee"
 +
}
 +
 +
|-
 +
| POST /api/v1/projects/ || Making an http POST request to this URI with the Multipart form data in the JSON format creates a new project and Returns HTTP 201 for successfully created  projects
 +
|-
 +
| Example ||  curl -F "user=/api/v1/profile/2/" -F "title=Fiddle with JS" -F "desc=this file documents my PROGRESS with learning JavaScript" -F "src=@projects/objects.js" -F "screenshot=@projects/img_screen.png" http://127.0.0.1:8000/api/v1/projects/?username=aregee\&api_key=531ffb6152171df4f60b1b09f09dd1b4c5aba99
 +
|-
 +
| PATCH /api/v1/projects/<id>/  || Updates the changed field to an existing project in the form of json data.
 +
|-
 +
| Example || curl --dump-header - -H "Content-Type:application/json" -X PATCH --data '{"title":"Gallery Lock ++ " }' http://127.0.0.1:8000/api/v1/projects/1/?username=aregee\&api_key=531ffb6152171df4f60b1b09f09dd1b4c5aba99
 +
|-
 +
| PUT /api/v1/projects/<id>/  || We can also use the HTTP PUT request to update all the fields of an existing project
 +
|-
 +
| DELETE /api/v1/projects/<id>/ || Destroys the current project and the resource related to it : Likes , Comments 
 +
|-
 +
|}
 +
 +
    
==== UI/UX ====
 
==== UI/UX ====
25

edits