Summer of Code/2013/moksaya: Difference between revisions
Rahul Gaur (talk | contribs) |
Rahul Gaur (talk | contribs) |
||
| Line 17: | Line 17: | ||
== | == REST API v1 Resources == | ||
==== 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 ==== | ||