Logo GraphQL Copyright © 2016 Facebook Inc. in baza clauzei BSD-3

Suntem incantati sa lansam Lacinia, biblioteca noastra GraphQL pentru Clojure! Folosim GraphQL in productie de peste un an pentru mai multe servicii.

Ca parte a lansarii, am dori sa discutam ratiunea din spatele adoptarii de catre GraphQL a echipei noastre, ce probleme ne-am confruntat, cum le-a rezolvat GraphQL si unde ne indreptam de aici. escorte pitest

Aceasta se doreste a fi o explicatie non-tehnica a motivului pentru care consideram ca GraphQL este o modalitate excelenta de a rezolva probleme. Pentru documentatie despre Lacinia, consultati depozitul Github.

Problemele noastre

Una dintre responsabilitatile principale ale echipei noastre este de a oferi clientilor Walmart si Sam’s Club acces instantaneu la intregul lor istoric de chitante din magazin, direct de pe smartphone-ul iOS / Android sau browserul web. matrimoniale femei islanda Gestionam un flux in timp real al fiecarei achizitii si ne intoarcem de la peste cinci mii de magazine la suma de 500 de chitante pe secunda si pana la cvadruplarea acestui numar in Black Friday si pe tot parcursul sezonului de sarbatori.

In cele din urma, avem o baza de date considerabila Cassandra cu clienti, chitante si asociatiile care ii leaga. Intreaga noastra stiva de pe server este scrisa in Clojure si construita pentru a furniza date primite in mod eficient si fiabil. escorte din valcea Pentru cateva culise despre cum functioneaza toate acestea, consultati discutia lui Anthony Marcar la Clojure / West 2015, Clojure At Scale la WalmartLabs.

In incercarea de a servi clientii Walmart si Sam’s Club cat mai bine posibil, oferim cantitatea noastra imensa de date multor grupuri din cadrul companiei. Fiecare are propriile nevoi si preocupari, de exemplu:

  • Echipele de aplicatii mobile doresc doar campurile necesare pentru a completa o vizualizare concisa. matrimoniale fete bucuresti Le pasa de lucruri precum pretul total de achizitie al unei chitante, numarul de articole, data si locatia. De asemenea, au nevoie de capacitatea de a extrage informatii mai detaliate prin apeluri ulterioare. Inginerii mobili doresc sarcini utile optimizate si capacitatea de a itera rapid in timpul procesului de proiectare, fara a astepta modificari de back-end. futai curve Orice date suplimentare trimise catre client sunt latimi de banda irosite.
  • Echipele care dezvolta site-urile web ofera o experienta de cumparaturi mai bogata care vizeaza un browser web desktop. De obicei, lucreaza cu mai mult spatiu de vizionare si vor sa solicite informatii mai detaliate decat echipele de aplicatii mobile. matrimoniale ploiesti cu poza
  • Alte echipe au adesea una sau doua intrebari de baza la care trebuie sa raspunda si vor sa poata interoga sistemul nostru doar pentru acei parametri specifici. Exemplele includ Savings Catcher, care crediteaza clientii pentru articolele achizitionate daca au un pret mai mic la magazinul unui concurent si Protectiile clientilor, care notifica clientii daca un articol achizitionat este reamintit ulterior.

Fiecare dintre aceste echipe are cerinte foarte diferite cu privire la ce subset de date despre tranzactii trebuie sa acceseze. curve bucuresti 50 ron A face ca datele noastre sa fie usor consumabile, mai ales ca suntem un grup mic de ingineri, este o provocare de baza pe care o structura traditionala API REST nu o rezolva pentru noi.

De-a lungul timpului, ne-am gasit in pozitia de neinvidiat de a mentine, extinde si documenta o colectie de API-uri, fiecare construita initial pentru un caz de utilizare specific. Fiecare dintre aceste API a folosit un teanc HTTP diferit, a fost configurat diferit si a avut propriile sale conventii ad-hoc pentru schemele URL, parametrii de interogare si asa mai departe, inspirate de practicile din momentul in care au fost construite. admin matrimoniale Serviciile mai noi au folosit Piedestal si componenta; serviciile mai vechi foloseau manipulatoare de inele si starea mutabila imprastiata.

In acelasi timp, aveam mai multe echipe care veneau la noi, interesate sa construiasca servicii deasupra noastra – o problema buna. Evoluarea oricareia dintre aceste API-uri existente a fost o problema grea. dame de companie din targoviste Adaugarea unui camp nou la un raspuns JSON a fost riscanta, deoarece ar putea avea consecinte neprevazute pentru unii clienti care s-au bazat pe raspunsul legat de un set exact de chei cunoscute. Intrucat serviciile noastre valorifica bibliotecile interne partajate, o modificare a uneia dintre aceste biblioteci destinata unui singur serviciu ar putea schimba in mod involuntar comportamentul unui alt serviciu fara legatura.

Vrem sa fim liberi sa evoluam si sa ne imbunatatim API-urile fara scheme complexe de versiune si planuri de migratie complicate. escorte dolj Trebuie sa fim capabili sa facem cu incredere modificari in codul de sustinere, fara a ne accentua asupra efectelor secundare nedescoperite din serviciile indepartate. Ca echipa de back-end, am decis sa nu mai luam decizii de produs pentru echipele de produse. In schimb, am imputernicit fiecare echipa sa interogheze sistemul nostru in moduri care sustin cel mai bine produsul specific pe care il construiesc. dame de companie herculane

Solutia

Dupa ce Facebook a sustinut discutii si scrieri de conferinte despre GraphQL si rationamentul sau, am fost increzatori ca tehnologia va servi ca o modalitate eleganta de a ne imbunatati serviciile. Totusi, a existat o problema: suntem o echipa Clojure. La acea vreme, GraphQL nu avea o poveste buna pentru Clojure. matrimoniale oradea Din fericire, GraphQL are o specificatie robusta, asa ca ne-am propus sa construim propria noastra implementare complet realizata – Lacinia.

Specificatia GraphQL este extrem de importanta pentru noi. Filozofia noastra este ca biblioteca noastra trebuie sa vorbeasca si sa inteleaga GraphQL ca o limba franca si sa stabileasca semantica de executie, dar ne straduim sa gasim o solutie idiomatica care sa functioneze cel mai bine in cadrul ecosistemului Clojure. dame de companie mature constanta Un exemplu al acestei filozofii este sa fie cat mai bazat pe date: definitia schemei care declara capacitatile unui server GraphQL este scrisa in EDN si utilizeaza structuri de date Clojure.



  • confesiunile unei dame de companie online subtitrat
  • curve pret
  • nr de tel curve
  • escorte timișoara
  • anunturi matrimoniale tg jiu
  • curve online
  • matrimoniale pitesti femei
  • matrimoniale raid ploiesti
  • matrimoniale timișoara
  • dame de companie caransebes
  • dame de companie bucureti
  • dame de companie floresti
  • curve ieftine in bucuresti
  • public 24 matrimoniale cluj
  • telegrafonline matrimoniale
  • mature curve
  • dame de companie râmnicu sărat
  • dame de companie in timisoara
  • escorte caras severin
  • escorte mature mures





Manipularea acestei structuri de date cu codul Clojure nu este doar acceptata, ci este incurajata.

Intre timp, executarea interogarilor GraphQL folosind Clojure este foarte naturala. curve in suceava GraphQL, in esenta, este o abordare foarte functionala: un proces de filtrare si transformare care incepe cu toate datele posibile si se restrange doar la rezultatele solicitate de client. Utilizarea de catre Clojure a functiilor pure si a structurilor de date persistente asigura siguranta si eficienta acestor operatiuni.

Dupa ce am dezvoltat o versiune interna a Lacinia, am reusit sa renuntam la aproape toate API-urile noastre existente si sa incorporam clientii actuali si viitori in serviciile noastre bazate pe GraphQL. matrimoniale gorj Cand deschideti chitantele magazinului Walmart pe telefon sau accesati samsclub.com si vizualizati chitantele pe web, sunteti deservit de Lacinia. Daca utilizati Walmart Grocery, utilizati Lacinia. escorte bucuresti 18 ani

Ne-am proiectat schemele in jurul modelelor noastre de date, iar clientii pot cere pur si simplu ceea ce au nevoie. Desigur, nu putem cunoaste toate cazurile de utilizare posibile, dar atunci cand un client ne spune ca nu poate interoga ceea ce doreste, putem adauga de obicei campul sau relatia lipsa si il putem implementa in cateva minute. Adesea, modelul nostru intern de date include deja informatiile si este doar o chestiune de actualizare a schemei pentru a expune noul camp. matrimoniale 24 publitim Deoarece clientii controleaza ce date vad, adaugarea de campuri si tipuri noi la o schema existenta este intotdeauna sigura si intotdeauna compatibila inapoi.

Nu numai ca, totul in schema este pe deplin descoperibil si documentat prin introspectie. Servim o instanta a Graph i QL (cu un i !) IDE bazat pe web: aceasta permite dezvoltatorilor din alte echipe sa construiasca interactiv si sa execute interogari. bunicute curve Lacinia implementeaza automat partile de introspectie ale specificatiei GraphQL; tot ce trebuie sa facem este sa includem documentatie orientata catre utilizator cu privire la campuri si tipuri.

Anterior, atunci cand asistam alte echipe, aruncam comenzi de curl ad hoc si era intotdeauna o provocare reproducerea problemelor clientului nostru. Astazi, trecem in jurul unui link Graph i QL care poate include intreaga interogare – reproductibilitate instantanee. matrimoniale onesti

Marea majoritate a timpului, introducerea unui nou client in serviciul nostru este doar o chestiune de a le oferi adresa URL pentru Graph i QL, iar acestia isi pot schita rapid si interactiv interogarile si pot afla despre toate campurile si tipurile prin intermediul interfetei. Daca au probleme sau intrebari, ne pot trimite intrebarile lor problematice. O surpriza surprinzatoare a acestui fapt este cat de mult, ca dezvoltator al serviciului, am ajuns sa ma bazez pe Graph i QL pentru propriul meu flux de lucru zilnic: este mai rapid si mai usor sa construiesc o interogare GraphQL decat sa accesez direct baza de date Cassandra de baza. curve sexy . Graph i QL, pe langa GraphQL, constituie un instrument extrem de puternic.

Credem ca clojure. spec este viitorul sistemelor Clojure robuste. Lacinia imbratiseaza clojure.spec si se straduieste sa-l foloseasca pe tot parcursul. De exemplu, scalarele personalizate sunt definite folosind conformere. Pentru a ramane stabil pe Clojure 1.8 in timp ce Clojure 1. 9 itereaza prin diferite versiuni alfa, am introdus clojure-future-spec, un backport al diferitelor caracteristici clojure.spec disponibile pentru Clojure 1.9.

Viitorul

GraphQL reprezinta o piesa critica a sistemului nostru atat din punct de vedere tehnic, cat si cultural. Walmart este un loc important si, atunci cand angajam oameni din alte domenii ale companiei despre GraphQL, sunt interesati sa afle mai multe despre ceea ce facem cu acesta si cum pot beneficia de munca si experientele noastre. Suntem incantati ca vom continua dezvoltarea pe Lacinia in aer liber. Lacinia nu este inca pe deplin conforma cu specificatiile lansate, dar speram sa ajungem in curand. Suntem dornici sa lucram impreuna cu comunitatea si vom accepta si vom discuta cu bucurie orice probleme sau solicitari de extragere.

Pentru mai multe informatii si documentatie tehnica, vizitati depozitul Github.