Construiti API-uri REST cu Neo4j si Flask, cat mai repede posibil!

gREST (Framework-based REST API Framework) este un cadru de dezvoltare RESTful API deasupra Python, Flask, Neo4j si Neomodel. Scopul sau principal este de a usura dezvoltarea API-urilor RESTful cu putin efort si cantitate minima de cod.

Compatibilitatea versiunii Python

Daca doriti sa utilizati gREST cu Python 2.7, va trebui sa ramaneti cu vechea versiune 1.4.0. Pentru Python 3.x in continuare, utilizati cea mai recenta versiune incepand cu 2.xx sau ramura master.

Cine foloseste gREST?

Daca utilizati gREST pentru proiectul dvs., va rugam sa ne anuntati pe Twitter sau sa deschideti o problema.

Caracteristici

  • Verbe HTTP acceptate: GET, POST, PUT, PATCH, DELETE
  • Metode de serializare a raspunsului acceptate (bazate pe acceptarea antetului): JSON, XML, YAML
  • Indexarea cu asistenta pentru salt / limita si comanda
  • Functii de ajutor pentru gestionarea nodurilor si a relatiilor
  • Gestionare simpla a configuratiei
  • Validarea automata a datelor de intrare (plus corectia maimutelor a regulilor de validare manuala)
  • Suport de relatie profunda intre noduri: / primary_model / primary_model_item / related_model / related_model_item
  • Suport pentru obtinerea / postarea datelor relatiei intre noduri
  • Suport pentru autentificare si autorizare definite de utilizator
  • Suport pentru rute Unicode (de exemplu, etichete Unicode)

Instalare

Pentru a instala gREST, puteti utiliza setuptools (instalati de la sursa) sau puteti utiliza un manager de pachete Python (de exemplu, pip sau easy_install).

  • Pentru a instala din codul sursa, clonati depozitul (ar trebui sa aveti git instalat) si apoi rulati setup.py:
$ git clone https://github.com/mostafa/grest.git $ cd grest $ python setup.py install
  • Pentru a instala folosind un manager de pachete python prin pachet binar, pur si simplu executati aceasta comanda (in acest caz am folosit pip, dar orice manager de pachete este acceptat atat timp cat foloseste PyPI):

Instalare mod editare

$ cd path / to / project $ pip install -e.

Documentatie

Pentru documentatie detaliata, vizitati http://grest.readthedocs.io/.

Exemple

Puteti gasi un exemplu de aplicatie in directorul de exemple.

grest Command

Pachetul livreaza o comanda foarte simpla care va poate ajuta sa creati o aplicatie Flask boilerplate. Pur si simplu rulati urmatoarea comanda:

Utilizare

Pentru a construi un API, ar trebui sa creati o aplicatie simpla Flask (sau este posibil sa aveti deja una).

O aplicatie simpla Flask:

din flask import Flask app = Flask (__ name__) @ app.route (“/”) def hello (): returneaza “Hello World!” if __name__ == “__main__”: app.run (debug = True, threaded = True)

Pentru a utiliza gREST, ar trebui sa va definiti modelele cu sintaxa Neomodel. Neomodelul este mai usor de utilizat decat alte ORM-uri si drivere. Aruncati o privire la acest exemplu:

din importul neomodelului (StructuredNode, UniqueIdProperty, StringProperty) din clasa de modele de import grest Person (StructuredNode, models.Node): uid = UniqueIdProperty () first_name = StringProperty () last_name = StringProperty ()

Dupa cum puteti vedea, am importat modele din grest, astfel incat sa putem utiliza mixinul Node (care este utilizat in serializarea JSON a datelor modelului). De asemenea, retineti ca clasa Person (model) este mostenitoare de la doi parinti: StructuredNode si Node.

Apoi ar trebui sa mostenim din grest pentru a face o noua viziune asupra modelului nostru (astfel incat sa accepte verbele RESTful):

din grest import GRest clasa PersonsView (GRest): __model__ = {“primary”: Persoana} __selection_field__ = {“primary”: “uid”}

Cea mai importanta parte a grestului este proprietatile __model__ si __selection_field__. Acestea contin logica pentru a accesa modelele si relatiile dvs. Dupa cum vedeti, modelul nostru principal este Persoana si cheia sa principala (ca sa spunem) este uid, deci campul de selectie al modelului principal este uid.

Ar trebui sa inregistrati aceasta vizualizare:

PersonsView.register (app, route_base = “/ persons”, trailing_slash = False)

Introducerea utilizatorului nu trebuie sa fie niciodata de incredere, astfel incat validarea intrarii se face utilizand webargs: Pentru a include validarea intrarii in fiecare model, trebuie sa includeti proprietatea __validation_rules__, care este un dictionar de mapare a cheilor (campurilor modelelor) si a valorilor (tipul de date si reguli de validare) ).

Proprietatea __validation_rules__ exista pentru personalizarea regulilor de validare, odata cu lansarea versiunii 0.2.1, regulile de validare sunt deduse si construite din proprietatile modelelor dvs., deci nu este necesar sa o definiti in majoritatea cazurilor.

din importul neomodelului (StructuredNode, UniqueIdProperty, StringProperty) din modelele de import grest din campurile de import webargs clasa Persoana (StructuredNode, models.Node): __validation_rules__ = {“uid”: fields.Str (), “first_name”: fields.Str () , “last_name”: fields.Str ()} uid = UniqueIdProperty () first_name = StringProperty () last_name = StringProperty ()

Puteti inlocui comportamentul implicit al verbelor HTTP (index, get, post, put, patch si sterge) si, de asemenea, puteti crea puncte finale personalizate in aceasta clasa PersonsView.

Nu in ultimul rand, ar trebui sa configurati conexiunea aplicatiei dvs. la baza de date (Neo4j), ceea ce se realizeaza prin setarea propunerii DATABASE_URL a neomodel.config:

neomodel.config.DATABASE_URL = “bolt: // neo4j: neo4j @ localhost: 7687”

O ultima parte este sa conectati loggerul grest la Flask sau sa utilizati un logger personalizat:

app.ext_logger = app.logger

app.ext_logger este variabila cautata de grest, pentru inregistrarea mesajelor.

Implementare

Puteti rula aceasta aplicatie in medii de dezvoltare sau de productie:

Deoarece este aceeasi aplicatie balon, o puteti rula in dezvoltare astfel:

In scopuri de productie, puteti utiliza docker folosind imaginea tiangolo / uwsgi-nginx-flask: python2.7 sau utilizati propria configurare.

Contributie

Contributia este intotdeauna binevenita! Pentru a raporta erori, pur si simplu deschideti o problema si completati-o cu informatii conexe. Pentru a remedia o eroare, furcati depozitul, remediati eroarea, impingeti-o la propria furca, faceti o cerere de extragere si gata!

Licenta

GPLv3