Skip to content

meysam81/yara

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Yara

This repository is a project demanded by an interviewer at Yara Corp. to implement a simple and basic RESTful server using the following stacks:

Model

The so-called DB in this project is a single table containing the following fields:

Field Name Data Type Constraint
purchase_date datetime
purchase_name string max_length=150
user_id integer
username string (max_length=150) max_length=150
phone_number string (max_length=20) max_length=20
email string (max_length=150) max_length=150
address text

Prerequisite

This project was written using python3.7.2, so you might as well install that before going any further. Python Official Website

You'll have to run this project in an environment, so I recommend installing them first hand.

pip install -U pip # install the latest pip, as it is updating frequently
pip install virtualenv

Quickstart

You can clone the repository using the following comands in your terminal:

git clone [email protected]:meysam81/yara.git

And then:

cd yara

Now you're gonna have to create a new virtual environment inside the project's root directory.

virtualenv venv
source ./venv/bin/activate

Now install the requirements:

pip install -r requirements.txt

Now you are good to go, just run the server and have fun 😃

python manage.py runserver

Base URL

This is what you should prepend to every requesting URL:

localhost:8000

Login

And you can login to the server using the following endpoint:

POST /api/login/

With the body:

{
  "username": "<username>",
  "password": "<password>"
}

Of course you're gonna have to insert some username & password in the DB so here's how you can do that. Enter the following command in your terminal:

python manage.py shell

And then:

from django.contrib.auth.models import User
u = User(username="<username>", password="<password>")
u.save()

After logging in from the login endpoint, a token is given back to you in a json format:

{
  "token": "<token>"
}

Include that token in every of your request's Header:

Authorization: Bearer <token>

Service Endpoints

And now you have access to not only reading the database, but also insert, update & deleting an object from the database:

Method Endpoint Permission
GET /purchases/ anonymous access available
GET /purchases/{ID}/ anonymous access available
POST /purchases/ authenticated access only
DELETE /purchases/{ID}/ authenticated access only
PUT /purchases/{ID}/ authenticated access only
PATCH /purchases/{ID}/ authenticated access only

Cheers! 🥂 And have fun. 💯

Contribute

I don't know why you'd wanna do that, but PR's are welcomed anytime ☺️