User:Pravj

Pravendra Singh Rathore II year, Computer Science Student, IIT Roorkee GitHub : https://github.com/pravj Email : hackpravj@gmail.com Homepage : https://pravj.github.io

GSoC 2014 Proposal Idea : Developing tools related to Project-SILPA API, aimed at helping future Development

= Short Description : =

The goal of this project-proposal is to create REST API for Project-SILPA. The focus will be on developing the API in a manner so that it helps both its developers and users at same time. Development will result in an API which is easy to use and further expandable on Project-SILPA.

Development will be in two core parts, one will be strictly developing the REST API and other part will be work depending upon developed REST API.

It will be, ‘Developing a SILPA REST API, aimed at helping further development on Project-SILPA with an ease’. = Project Structure : =

Developing REST API for Project-SILPA
Project-SILPA will be highly empowered by a stable API that would serve many dependent applications. This API will help Project-SILPA to grow as a community, and help development in many other related fields. Different modules of Project-SILPA can cater to many applications on different platforms like mobile/web apps for translation etc. So the proposal is to develop REST API in a manner that can stably serve multiple client requests at the same time. Additionally token based APIservice can be used to provide one-to-one service and can help us in implementing rate-limiting or cancelling tokens to stop service later, if required.

API Structure
URI structure for REST API (Use of proper HTTP Verbs)

API for production : - http://api.silpa.org.in/v1/module/function - Parameter : particular function parameters - Response :
 * 1) JSON formatted data as response by function on successful result
 * 2) Response on every aspect of user input, for example Specific Error Response on anything wrong with client data according to module/function

API for Development : - http://api.silpa.org.in/dev/module/function - Different from Production API Service - as it will be used for Development purpose - So will have service for modules still in Development too.

Tools related to Project-SILPA API
1. Admin Control Panel :- Main purpose of ‘Control Panel’ application is to help in further development of Project-SILPA in an easy manner. It will contain a portal where Admin/Developer can control API’s distribution over different clients. Main features of application will be controlling which SILPA module to serve as API service, adding new module in API service as they get developed or instant support in API on improvement in existing module structures. An administrator can enable or disable different API modules. Its main feature will be an option to serve and support different API in ‘Development’ or ‘Production’ mode (where development mode can be used by developers for debugging purposes). It can be done by maintaining two different git branches ‘production’ and ‘development’(lets name them), so that developers can test new changes.

Features that Control Panel will have are listed below :- - Serving API different from final API service for testing purpose from branch ‘development’. - Control Panel to enable/disable particular module/method of module - Integrating new changes in a module to API or new module itself. - Blocking/Unblocking a particular client based on the auth token issued.

2. Developer/Admin Dashboard :- Dashboard will be a separate web application powered by core REST API that will help admins or developers of the project to manage real-time status of the REST API. It will contain all analysis on API use and its distribution over served clients. The application will have real-time charts showing periodic use of the API over different clients/devices. Relative distribution/use of API for different Project-SILPA modules will also be available in the dashboard.

Things that Dashboard will have are listed below :- - Daily/Periodic API use (total) - Periodic use of API over different clients - Graph/chart explaining relative use of different modules - Complete API use by a particular client.

3. API Status Board :- API status board will be an application mainly focused on users of Project-SILPA API or on general interested public. Having it will help to create more interest in people compared to REST API alone. It will be like general API status used worldwide, having API uptime/downtime, Request/Response Status, Relative Successful Result. All the analysis can be shown with real-time charts and graphs.

= Proposed Method and Design: =

- REST API Development
API will be developed to support general native types of use like JSON, xml without disturbing current JSON-RPC API. The API would require a token based auth so it will be easier to control access for particular client and to track usage statistics. To develop smooth REST API service for Project-SILPA, all project modules should be controlled under same configurations to keep API service similar everywhere, as mentioned in ‘Admin Control Panel’ proposed application.

- Admin Control Panel
Control Panel will be more like a control/setting layer over core REST API service, hence it will be using REST API at its heart. It will be a Python app that will edit/set settings or configuration for main REST API service. Python-Flask Framework itself can be used to develop its web-interface and all its work is to handle settings for main API service.

- Developer/Admin Dashboard
Dashboard application will be an interface with all analysed data of API use for Project-SILPA. javascript libraries like D3.js or Rickshaw can be used to create Graphical Analysis of data. Backend for the application will be in Python and its work is to retrieve data of API use that can be used in front-end of the application.

- Status Board
‘Status Board’ is a similar application as ‘Developer/Admin Dashboard’ so similar technologies can be used for Developing ‘Status Board’ Application.

= Timeline : =

April 28 - May 18

Get to know more about mentors and decide upon final development structure and resources, to make a flow chart of development work.

May 19 - June 3 REST API Development - 1

1. Setting up Development environment for new REST API. 2. Developing API service for some major modules.

June 4 - June 18

REST API Development - 2 1. Developing API service for rest modules. 2. Debug and Writing unit tests.

June 19 - July 3

REST API Development - 3 1. Developing different versions of API service as ‘Development’ and ‘Production’, as mentioned in Admin Control Panel - proposed application. 2. Writing Documentation on API use by general clients.

July 4 - July 18

1. Admin/Developer Control Panel Development 2. Documentation writing for Control Panel’s use and further enhancement on it.

July 19 - August 2

1. Admin Dashboard Development

August 3 - August 18

1. Status Board Development

= Background : =

I am a 2nd year undergraduate student of Computer Science at Indian Institute of Technology, Roorkee.

Here I’m also part of student group ‘SDSLabs’ which works in field of web and technology. Open-Source contribution and Web-Development are my primary hobbies. I have open-sourced many of my projects at GitHub. I have work experience with Python, PHP, Node.js, javascript and I always prefer to learn about new technologies as I get in touch with them.

= Relevant Project : =

- Stream : Automation

working at my group, my recent project was to Automate a well established service that we provide. This service streams TV over intranet. In new Development, the work was to let users vote for channels and service will automatically change channel after some time according to vote-counts.

for that I created API that serves data required for handling real-time voting. It provides JSON result for ‘current streaming channels’, ‘top channels in leaderboard’, ‘search channel/program’, ‘vote-count for a channel/program’ etc. And that API data is used to power application on its front-end to be used by users. - Nexus : Link/News Sharing portal

‘Nexus’ is project by ‘SDSLabs’, I am currently working on. It will be a intranet-portal for IIT Roorkee students to enhance Technology related knowledge. People can create a link post and tag that link into categories, vote for the links and so on. It is also an API driven portal because at ‘SDSLabs’ we use a chat client ‘Slack’ and all functionality of ‘Nexus’ can be handled via chat commands only using ‘Nexus API’, like creating a link element and asking results of a tag and voting for an element, general search etc. it is still under development, but here I have a screenshot of it. 

= Motivation : = I am highly passionate with Software Development and Open Source. you can see my Open Sourced Projects on GitHub : https://github.com/pravj I assure dedication of at least 45 hours per week for development and I don’t have any other plan during this period of program. Also, if any part of the proposal is not clear then I will be very happy to clarify.