MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Изграждане на REST API с помощта на EVE

Python е един от най-лесните за четене и писане езици за програмиране на всички времена. През годините популярността на Python само нараства и се използва широко в разработката на уеб приложения, скриптове, създаване на игри, научни изчисления и т.н.

Flask е рамка за уеб приложения на Python, която набира популярност поради лесната си употреба за начинаещи в Python. В този урок ще разгледаме EVE, рамка за изграждане на REST API, базирана на Flask, MongoDB и Redis. От официалните документи:

Осъществено от Flask, MongoDB, Redis и добри намерения Eve позволява без усилие да изгражда и внедрява изключително адаптивна, напълно функционална RESTful уеб услуга.

Какво ще създадем

В този урок ще видим как да изградим REST API, използвайки рамката EVE. След това, използвайки AngularJS, ще проектираме предния край за просто приложение и ще го направим функционален, като използваме REST API, изградени с EVE. В този урок ще приложим следната функционалност:

  • Създаване на потребителски API
  • Проверка на потребителския API
  • API за добавяне на елементи
  • API за изтриване на елементи
  • API за актуализиране на елементи

Първи стъпки

Инсталиране

Ще използваме pip, за да инсталираме EVE.

pip install eve

Ще използваме MongoDB като база данни. Разгледайте официалните документи за инсталиране според вашата система.

Създаване на основния API

Създайте папка на проекта, наречена PythonAPI . Придвижете се до PythonAPI и създайте файл, наречен api.py . Вътре в api.py импортирайте EVE и създайте EVE обект.

from eve import Eve
app = Eve()

След това стартирайте app когато програмата се изпълнява като основна програма.

from eve import Eve
app = Eve()

if __name__ == '__main__':
    app.run()

Стартирайте вашия MongoDB като използвате следната команда:

mongod --dbpath= <PATH-TO> /data/db/

Както можете да видите, трябва да посочим път за db файловете. Просто създайте data/db във вашата файлова система и изпълнете горната команда.

Заедно с екземпляр на MongoDB работи, EVE изисква конфигурационен файл с информация за ресурсите на API. Така че в PythonAPI папка създайте друг файл, наречен settings.py и добавете следния код:

DOMAIN = {'user': {}}

Горният код информира EVE, че е ресурс за user е наличен.

Запазете всички файлове и стартирайте api.py :

python api.py

API трябва да е онлайн, както е показано:

Ще използваме Postman REST Client за изпращане на заявки към API. Той е безплатен и може да се инсталира с едно щракване. След като приключите с инсталацията, стартирайте приложението и въведете URL адреса на API (http://127.0.0.1:5000/) и щракнете върху изпращане. Трябва да получите отговора, както е показано:

Тъй като не сме извикали конкретен API ресурс, той ще покаже всички налични ресурси. Сега опитайте да се обадите на user ресурс и трябва да имате отговора, специфичен за потребителя .

Създаване и валидиране на потребителски API

Създаване на потребителски API

Ще започнем с изграждането на API за създаване или регистрация на потребител за нашето приложение. Потребителят ще има определени полета като First Name , Фамилия , Потребителско име , Парола и Телефонен номер .

Така че първо ще трябва да дефинираме схема за потребител. Схемата дефинира полетата и типовете данни на ключовите полета. Отворете settings.py и променете DOMAIN чрез дефиниране на схема, както е показано :

DOMAIN = {
    'user': {
        'schema': {
            'firstname': {
                'type': 'string'
            },
            'lastname': {
                'type': 'string'
            },
            'username': {
                'type': 'string',
                 'unique': True
            },
            'password': {
                'type': 'string'
            },
            'phone': {
                'type': 'string'
            }
        }
    }
}

Както можете да видите в горния код, ние сме дефинирали ключовите полета, които са необходими за създаване на потребител и неговия тип данни, дефинирани в схемата. Запазете промените и изпълнете api.py . От Postman Client опитайте да направите POST заявка заедно с необходимите параметри до http://127.0.0.1/user както е показано:

При POST заявка до потребителя, той хвърли 405 Метод не е разрешен грешка. По подразбиране EVE приема само GET заявки. Ако искаме да използваме друг метод, трябва да го дефинираме изрично. Отворете settings.py и дефинирайте методите на ресурсите, както е показано :

RESOURCE_METHODS = ['GET', 'POST']

Запазете промените и изпълнете api.py . Сега опитайте отново да POST на потребител и трябва да получите следния отговор:

Както можете да видите, горната POST заявка беше успешна. Не сме дефинирали конфигурациите на базата данни в нашия settings.py , така че EVE завърши заявката, използвайки работещия екземпляр на MongoDB . Нека влезем в MongoDB shell и вижте новосъздадения запис. При работещ екземпляр на MongoDB, задействайте mongo shell:

mongo

След като влезете в mongo shell, избройте всички налични бази данни.

show databases;

Трябва да има навечерието база данни. Превключете към навечерието база данни.

use eve;

Изпълнете show команда за изброяване на таблиците в eve база данни.

show tables;

Изброените таблици трябва да имат таблица, наречена user . Избройте записите от потребител таблица с помощта на следната команда:

db.user.find()

Ето избраните записи от потребителските таблици:

Проверка на потребителския API

След това ще създадем API за валидиране на съществуващ потребител. Обикновено, ако направим get заявка до крайната точка на потребителя (http://127.0.0.1:5000/user), тя ще даде подробности за всички регистрирани потребители от базата данни. Тук трябва да приложим две неща. Първо трябва да удостоверим потребител, използвайки собствено име и парола, и второ, трябва да върнем данните за потребителя от базата данни при успешно удостоверяване.

За да получим подробности въз основа на първото име, трябва да добавим допълнително поле за справка в DOMAIN в settings.py .

'additional_lookup': {
            'url': 'regex("[\w]+")',
            'field': 'username',
            }

Както се вижда в горния код, добавихме поле за търсене за потребителско име . Сега, когато GET заявка се изпрати до http://127.0.0.1:5000/user/ <потребителско име> той ще върне данните за потребителя с конкретното потребителско име . Когато правим заявка до конкретен потребител, ние също ще изпратим потребителско име и парола за удостоверяване.

Ще направим основно удостоверяване, за да потвърдим конкретен потребител въз основа на потребителско име и парола. Първо, трябва да импортираме Basic Auth клас от EVE. Създайте клас, наречен Удостоверяване за да приложите удостоверяването, както е показано:

from eve.auth import BasicAuth

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
                   

Сега, когато ресурсът е user и методът на заявка е GET , ние ще удостоверим потребителя. При успешно удостоверяване ще бъдат върнати потребителските данни на потребителя с първо име в крайната точка на API. Ние също така ще ограничим създаването на потребители, като предоставим потребителско име и парола. Така че, ако методът е POST и крайната точка на API е потребител, ние ще проверим и потвърдим потребителското име и паролата. И така, ето пълния Удостоверяване клас:

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
        if resource == 'user' and method == 'GET':
            user = app.data.driver.db['user']
            user = user.find_one({'username': username,'password':password})
            if user:
                return True
            else:
                return False
        elif resource == 'user' and method == 'POST':
            return username == 'admin' and password == 'admin'
        else:
            return True

Трябва да предадем Удостоверяване име на класа, докато стартирате API. Така че променете началния код на API, както е показано:

if __name__ == '__main__':
    app = Eve(auth=Authenticate)
    app.run()

Запазете всички промени и изпълнете api.py . Опитайте да изпратите основна заявка за удостоверяване с потребителско име и парола от Postman до http://127.0.0.1/user/username (заменете потребителското име с всяко друго съществуващо потребителско име). При успешно удостоверяване трябва да получите потребителските данни в отговор, както е показано:

Добавяне, изтриване и актуализиране на елементи 

API за добавяне на елемент

За да създадем API за добавяне на елемент, всичко, което трябва да направим, е да създадем нова схема за елемент в settings.py .

'item': {
        'schema': {
            'name':{
                'type': 'string'
                },
            'username': {
                'type': 'string'
                }
            }
        }

API за добавяне на елемент ще помогне на всеки влязъл потребител да добави елемент. Ще запазим елемента заедно с потребителското име на потребителя, който е въвел елемента. Запазете промените и опитайте да направите POST заявка до http://127.0.0.1/item както е показано:

API за изтриване на елемент

За да изтрием елемент, създаден от потребител, всичко, което трябва да направим, е да извикаме крайната точка на елемента /item_id . Но простото извикване на заявка DELETE няма да изтрие елемента. За да изтрием елемент, ние също трябва да предоставим _etag свързани с определен артикул. Веднъж идентификатор на елемент и _etag съвпадение, елементът се изтрива от базата данни. Ето как се извиква методът DELETE в крайната точка на елемента.

API за актуализиране на артикули

API за актуализиране е подобен на API за изтриване. Всичко, което трябва да направим, е да изпратим PATCH заявка с item id и _etag и полетата на формуляра, които трябва да бъдат актуализирани. Ето как се актуализират подробностите за артикула:


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Внедряване на автоматично довършване на MongoDB

  2. Как да инсталирате MongoDB

  3. MongoDB $lt Оператор на конвейер за агрегиране

  4. Мангуста - Как да групирате и попълвате?

  5. MongoDB/Mongoose заявка на определена дата?