Un plugin Rails 4+ pentru furnizarea API-urilor compatibile JSONAPI v1.0 din aplicatia dvs. cu codificare foarte mica.
- Instalare
- Utilizare
- Configurati un controler API pentru fiecare model
- Configurati rutele controlerului API
- Verificati configurarea
- Modificarea comportamentului API implicit
- Autentificarea clientului
- Controlul accesului
- Inlocuirea unui punct final API
- Starea implementarii
- Contribuind
- Licenta
Instalare
$ # Pas de securitate optional (faceti asta o data) $ gem cert –add <(curl -Ls https://raw.githubusercontent.com/doga/jsonapi_for_rails/master/certs/doga.pem) $ $ # Mergeti la radacina directorul aplicatiei existente Rails $ cd path / to / railsapp $ $ # Actualizati fisierul gem $ echo “gem ‘jsonapi_for_rails'” >> Gemfile $ $ # Instalati $ # (Parametru de securitate optional: –trust-policy MediumSecurity) $ bundle install –trust-policy MediumSecurity $ $ # Verificati versiunea utilizata $ bin / rails console irb (principal): 001: 0> JsonapiForRails :: VERSION => “0.2.1” irb (principal): 002: 0> exit $
Utilizare
1. Configurati un controler API pentru fiecare model
Generati un controler pentru fiecare model care va fi accesibil din API-ul dvs. Numele controlerului trebuie sa fie versiunea plurala a numelor modelului dvs.
$ cd path / to / railsapp $ $ # Generati modelele dvs. $ bin / rails generati articolul modelului $ bin / rails generati autorul modelului $ $ # Generati controlerele API $ bin / rails generati articole ale controlerului $ bin / rails generati autori de controlere
Apoi activati JSONAPI intr-o clasa parinte a controlerelor dvs. API.
# app / controllers / application_controller.rb class ApplicationController <ActionController :: Base # or ActionController :: API # Enable JSONAPI actes_as_jsonapi_resources (# link-uri: false, # content_negotiation: false) # … end
actes_as_jsonapi_resources accepta urmatoarele argumente ale cuvintelor cheie:
- linkuri: setarea acestuia la fals dezactiveaza generarea de linkuri si va accelereaza API-ul. Valoarea implicita este adevarata.
- content_negotiation: setarea acestuia la fals dezactiveaza negocierea continutului. Din nou, acest lucru va ajuta sa va accelerati API-ul, dar in detrimentul faptului ca API-ul dvs. nu este compatibil cu JSONAPI, chiar daca este doar). Valoarea implicita este adevarata.
Daca doar unele dintre controlerele dvs. sunt controlere JSONAPI, atunci creati un controler parinte pentru acele controlere si activati JSONAPI in interiorul acelui controler, mai degraba decat ApplicationController.
$ cat> app / controllers / jsonapi_resources_controller.rb clasa JsonapiResourcesController <ApplicationController actes_as_jsonapi_resources # … end
# app / controllers / articles_controller.rb # Schimbarea clasei parinte a controlerului API ArticlesController <JsonapiResourcesController # … end # Faceti acelasi lucru cu AuthorsController
2. Configurati rutele controlerului API
Actualizati rutele aplicatiei dupa cum urmeaza:
# config / routes.rb Rails.application.routes.draw do # … scope ‘/ api / v1’ do # Optional scoping [# Listeaza controlerele API aici: articole,: autori] .each do | nume_resurse | resurse nume_resurse controler nume_resurse obtine ‘relatii /: relatie’, actiune: „relatie_afisare„ patch ‘relatii /: relatie’, actiune: „relatie_actualizare” post ‘relatii /: relatie’, actiune: „relatie_add” stergeti ‘relatii /: relatie ‘, actiune: “relatie_eliminare” sfarsit sfarsit sfarsit sfarsit # … sfarsit
3. Verificati configurarea
Dupa ce ati completat baza de date si ati lansat serverul Rails incorporat cu comanda shell shell bin / rails, puteti emite cateva cereri HTTP catre API-ul dvs. si puteti verifica corectitudinea raspunsurilor.
$ # Obtineti lista articolelor $ # (corpul de raspuns HTTP returnat este scurt si concis, dar este precizat aici pentru lizibilitate) $ curl ‘http: // localhost: 3000 / api / v1 / articles’ {“data”: [ {“type”: “articles”, “id”: “618037523”}, {“type”: “articles”, “id”: “994552601”}], “links”: {“self”: “/ api / v1 / articles “}} $ # Obtineti un articol $ curl ‘http: // localhost: 3000 / api / v1 / articles / 618037523’ {” data “: {” type “:” articles “,” id “:” 618037523 “,” atribute “: {” title “:” Plata bancii din Marea Britanie si bonusurile in centrul atentiei pe masura ce incepe sezonul de rezultate “,” content “:” Acordurile de plata inmanate sefilor celor mai mari banci din Marea Britanie … “,”created_at “:” 2016-03-02 14:33:49 UTC “,” updated_at “:” 2016-03-02 14:33:49 UTC “},” relations “: {” author “: {” data “: {“type”: “autori”, “id”: “1023487079”}}}, “link-uri”: {“self”: “/ api / v1 / articles / 618037523”}}} $ # Obtineti doar titlul si autorul dintr-un articol, includeti numele autorului $ curl ‘http: // localhost: 3000 / api / v1 / articles / 618037523? filter% 5Barticles% 5D = title, author; include = author; filter% 5Bauthors% 5D = name’ { “data”: {“type”: “articole”, “id”: “618037523”, “atribute”: {“title”: “Salariu bancar din Marea Britanie si bonusuri in centrul atentiei pe masura ce incepe sezonul de rezultate”}, “relatii”: {“autor”: {“data “: {” type “:” autori “,” id “:” 1023487079 “}}},” links “: {” self “:” / api / v1 / articles / 618037523 “}},” include “: [ {“data”: {“type”: “autori”, “id”: “1023487079”, “attribute”: {“name”: “Jill T …”}, “relations”: {}, “links” : {“self”: “/ api / v1 / autori / 1023487079”}}}]} $. “},” relatii “: {},” linkuri “: {” self “:” / api / v1 / autori / 1023487079 “}}}]} $. “},” relatii “: {},” linkuri “: {” self “:” / api / v1 / autori / 1023487079 “}}}]} $
Modificarea comportamentului API implicit
In mod implicit, toate punctele finale API sunt accesibile tuturor clientilor si toate punctele finale se comporta in acelasi mod pentru toti clientii. Intr-un cadru din lumea reala, poate doriti sa restrictionati accesul la un punct final si / sau sa schimbati comportamentul unui punct final in functie de client.
Autentificarea clientului
Clientii pot fi autentificati cu o metoda before_action in controlerul dvs. API. In interiorul controlerelor, numele variabilelor de instanta incepand cu prefixul @jsonapi_ si numele metodelor care incep cu prefixul jsonapi_ sunt rezervate de jsonapi_for_rails , asa ca incercati sa le evitati.
# app / controllers / jsonapi_resources_controller.rb clasa JsonapiResourcesController <ApplicationController actes_as_jsonapi_resources before_action: autentificare private def autentificare # … end end
Controlul accesului
Controlul accesului pentru clientii autentificati si neautentificati poate fi implementat in metodele before_action din controlerele dvs.
pollones enormes viejas con jovenes follando
lesbianasx tetonas en español
porno italiano incesto incesto abuela nieto
copilacion de mamadas natalia sanchez desnuda
pilladas sin bragas porno incesto asiatico
se le marca el coño porno hentail
jovencitas muy calientes milfs españolas follando
porno fiestas porno español madre e hijo
maduras españolas sexo mamas incestuosas
porno gay trios vídeos de sexo gratis
xxx prostitutas pajas entre colegas
your porn madres xxxx
follando en el convento folladas en la cocina
tv porno nudismo porno
milfs españolas porno amateur hd
incesto asiatico ver peliculas porno italianas
penes gordos jovencitas xxx hd
moras follando putas vic
meadas gay mamadas de españolas
paginas sexo peleas xxx
API.
. ,: relation_remove] private def permit_read # … end def permit_write # … end end
Inlocuirea unui punct final API
Comanda shell / bin rails routes va arata punctele finale pe care jsonapi_for_rails le defineste. Pentru a schimba comportamentul unei actiuni, puteti defini o actiune cu acelasi nume in interiorul unui controler API. jsonapi_for_rails ofera metode de utilitate si variabile de instanta care va pot ajuta.
# app / controllers / articles_controller.rb class ArticlesController <JsonapiResourcesController def index # Aceste metode de utilitate legate de model sunt disponibile in toate metodele de actiune. jsonapi_model_class # => Articol jsonapi_model_type # =>: articole # @jsonapi_links indica daca linkurile trebuie incluse in documentele de raspuns. # Este disponibil in toate metodele de actiune. @jsonapi_links # => adevarat # … end def show # @jsonapi_record contine inregistrarea curenta a bazei de date. # Este disponibil in toate metodele de actiune (inclusiv toate metodele de relatie #), cu exceptia: index si: create. @ jsonapi_record.to_jsonapi_hash # => {date: {…}} @ jsonapi_record.to_jsonapi_errors_hash # => {errors: […]} # … end def relationship_show # @jsonapi_relationhip este disponibil in toate metodele de actiune a relatiei. # @jsonapi_relationship [: definitie] descrie relatia actuala. @jsonapi_relationship # => {: definition => {: name =>: author,: type =>: to_one,: receiver => {: type =>: autori,: class => Author}}} # … end def relation_update # @jsonapi_relationship [: params] contine corpul cererii analizate. # Este disponibil pentru toate metodele de actiune a relatiei, cu exceptia relatiei_afisare. # @jsonapi_relationship [: params] [: data] se comporta ca un Hash pentru relatiile # de tip: to_one si ca un Array pentru relatii de tip: to_many. @jsonapi_relationship # => {: definition => {…},: params => {“data” => {“type” => “autori”, “id” => “234455384”}}} # .. . sfarsit sfarsit autori,: class => Author}}} # … end def relation_update # @jsonapi_relationship [: params] contine corpul cererii analizate. # Este disponibil pentru toate metodele de actiune a relatiei, cu exceptia relatiei_afisare. # @jsonapi_relationship [: params] [: data] se comporta ca un Hash pentru relatiile # de tip: to_one si ca un Array pentru relatii de tip: to_many. @jsonapi_relationship # => {: definition => {…},: params => {“data” => {“type” => “autori”, “id” => “234455384”}}} # .. . sfarsit sfarsit autori,: class => Author}}} # … end def relation_update # @jsonapi_relationship [: params] contine corpul cererii analizate. # Este disponibil pentru toate metodele de actiune a relatiei, cu exceptia relatiei_afisare. # @jsonapi_relationship [: params] [: data] se comporta ca un Hash pentru relatiile # de tip: to_one si ca o matrice pentru relatii de tip: to_many. @jsonapi_relationship # => {: definition => {…},: params => {“data” => {“type” => “autori”, “id” => “234455384”}}} # .. . sfarsit sfarsit si ca matrice pentru relatii de tip: to_many. @jsonapi_relationship # => {: definition => {…},: params => {“data” => {“type” => “autori”, “id” => “234455384”}}} # .. . sfarsit sfarsit si ca matrice pentru relatii de tip: to_many. @jsonapi_relationship # => {: definition => {…},: params => {“data” => {“type” => “autori”, “id” => “234455384”}}} # .. . sfarsit sfarsit
Starea implementarii
Arhitectura interna este sunet. In prezent, acoperirea testului este extinsa utilizand Rails 5 beta 2 (dar pluginul ar trebui sa fie compatibil cu Rails 4+ ). Si functiile lipsa sunt adaugate. Intentia este de a lansa o versiune 1.0 pe la jumatatea anului 2016.
Breviar de asistenta pentru functii:
- Negocierea continutului este implementata si activata implicit, dar poate fi dezactivata.
- Generarea de linkuri este implementata si activata implicit, dar poate fi dezactivata.
- Includerea resurselor conexe este implementata in prezent numai pentru cererile care returneaza o singura resursa, iar caile de relatie nu sunt acceptate.
- Seturile de campuri rare sunt in prezent implementate numai pentru cererile care returneaza o singura resursa.
- Sortarea nu este in prezent implementata.
- Paginarea nu este in prezent implementata.
- Stergerea resurselor nu este in prezent implementata.
Contribuind
Simtiti-va liber sa impartasiti experienta dvs. folosind acest software. Daca gasiti o eroare in acest proiect, aveti probleme cu urmarirea documentatiei sau aveti o intrebare despre proiect – creati o problema.
Licenta
Bijuteria este disponibila ca sursa deschisa in conditiile licentei MIT.