Summer of Code/2013/moksaya: Difference between revisions

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 ====