Krijuam API - shkatërroj XML (dy)

API i parë i MojeSkledi u shfaq 10 vjet më parë. Gjatë gjithë kësaj kohe, ne kemi punuar mbi versionet ekzistuese të API-së dhe kemi zhvilluar të reja. Disa versione API janë tashmë të harxhuara.

Në këtë artikull do të ketë shumë informacione: si u krijua API, pse është e nevojshme për shërbimin në re, çfarë i ofron përdoruesve, mbi cilat pengesa kemi hasur dhe çfarë dëshirojmë të bëjmë më tej.

Emri im është Oleg Alekseev oalexeev, unë jam drejtor teknik dhe bashkëthemelues i MojeSkledi.

Pse të krijojmë API për shërbimin

Këta janë klientët tanë, dhe ata janë dhjetëra mijëra sipërmarrës që përdorin aktivisht zgjidhjet në re: bankaria, dyqanet online, menaxhimin e produkteve, CRM. Kur lidhen me një shërbim, është e vështirë të ndalen. Tani veçse shërbimi i pestë, të tetë, të dhjetë e bën punën e sipërmarrësve më të lehtë, por të dhënat midis këtyre shërbimeve në re përdoruesit i transferojnë dorazi. Punët bëhen një makth.

Zgjidhja mĂ« e qartĂ« - t’u jepet pĂ«rdoruesve mundĂ«sia pĂ«r tĂ« transferuar tĂ« dhĂ«nat midis shĂ«rbimeve nĂ« re. PĂ«r shembull, tĂ« importojnĂ« dhe eksportojnĂ« tĂ« dhĂ«na si skedarĂ«, tĂ« cilĂ«t mĂ« pas mund tĂ« ngarkohen nĂ« shĂ«rbimin e duhur. SkedarĂ«t zakonisht i pĂ«rshtaten formatit tĂ« çdo shĂ«rbimi. Kjo Ă«shtĂ« njĂ« punĂ« manuale mĂ« shumĂ«- mĂ« pak e thjeshtĂ«, por me rritjen e numrit tĂ« kĂ«tyre shĂ«rbimeve bĂ«het gjithnjĂ« e mĂ« e vĂ«shtirĂ« ta kryesh atĂ«.

Prandaj, hapi tjetër - API. Me të, shërbimi në re përfiton nga lidhja e disa shërbimeve në një pikë. Shfaqja e një ekosistemi të tillë tërheq klientë të rinj për shkak të mundësive shtesë. Një produkt me funksionalitete të reja bëhet më fitimprurës dhe më i dobishëm.

Nëse krijoni ndërfaqe programore, kjo tërheq shitës të jashtëm në formën e programuesve që dinë për produktin tuaj falë API-së. Ata fillojnë të ndërtsojnë zgjidhje mbi bazën e API-së së propozuar dhe fitojnë para nga automatizimi i detyrave për klientët e tyre.

Sistemi i llogarive të MojeSklad bazohet në procese të thjeshta. E rëndësishme është të punosh me dokumentet fillestare, mundësia për të bërë pranime dhe dërgesa të mallrave, të marrësh raporte për biznesin në bazë të dokumenteve fillestare. Gjithashtu, ka transferim të të dhënave, p.sh. në kontabilitetin në re, dhe marrjen e tyre nga sistemet bankare ose pikave të shitjes. Po ashtu punojmë me dyqanet online: marrim informacion rreth produkteve dhe dërgojmë të dhënat për inventarin.

Krijuam API - shkatërroj XML (dy)

API i parë i MojeSklad

Pas 10 vjetësh pune të MojeSklad me API, ne kemi grumbulluar një numër të madh integrimesh që lejojnë shkëmbimin e të dhënave, punën me bankat, kryerjen e pagesave dhe përdorimin e telefonisë së jashtme.

Në vitin e parë, ne mundësuam shkarkimin e çdo të dhëne në formatin XML. Atëherë përdoruesve u dukej më e qartë dhe e njohur të mbajnë të dhënat offline, dhe jo në disa re, dhe ne iu ofruam këtë. Shkarkimi fillonte me eksportin manual nga ndërfaqja. Pra, atëherë nuk mund ta quanim ende API.

Po atëherë filluam të bashkëpunojmë me kompaninë Rusagro - ata kishin filluar të përdornin një ERP të avancuar për planifikimin e prodhimit dhe shitjeve, ndërsa ngarkimin e vagonëve në fabrikat e tyre e automatizuan në MojeSklad. Kështu kemi marrë fillimet e një API të vërtetë: shkëmbimi midis shërbimit tonë dhe ERP ndodhte përmes dërgimit të një skedari të madh me të dhëna për të gjitha llojet e dokumenteve.

Kjo ishte një mundësi e mirë për shkëmbimin paketa të të dhënave, por bashkë me dokumentet duhej të transferoheshin edhe varësitë e tyre: informacioni mbi produktet, kontraktuesit dhe magazinat. Të tilla mbetje nuk është aq e vështirë të gjenerosh gjatë eksportit, por mjaft e vështirë për t'u analizuar gjatë importit, pasi në një paketë vijnë të gjitha informacionet: dhe për dokumentet e reja, dhe për ato ekzistues.

API i parë XML nuk jetoi gjatë - pas dy vitesh filluam rindërtimin e tij. Që në fillim të punës së tij, ne bëmë disa gabime në ndërtimin e ndërfaqes programore.

Krijuam API - shkatërroj XML (dy)
Si u krijua API XML: ilustruar nga një nga arkitektët tanë. Për më tepër, pritni artikujt e tij.

Këtu janë gabimet tona kryesore:

  1. Markup JAXB was done directly on entity beans. To communicate with the database, we use Hibernate, and JAXB markup was also applied to these beans. This error surfaced almost immediately: any update to the data structure necessitated urgent notification of all those using the API, or the creation of workarounds to ensure compatibility with the previous data structure.
  2. The API evolved as a sort of add-on, and initially, we didn't define what part of the product it constituted. We also didn't think about whether the API was something important, or if we needed to maintain backward compatibility for its initial clients. At one point, the number of API users was about 5% of the total small number, and they were not paid much attention. The universal filtering that was implemented led to us being used as a backend. This filtering was not quite GraphQL, but something like it — it worked through numerous query string parameters. With such a powerful tool, users found it hard to resist, and requests were routed to us directly from their e-commerce UI. The situation became an unpleasant surprise because providing such a service should require a different pricing model and a completely different understanding of the API as a product.
  3. Due to the fact that the API developed not as a core product, the API documentation was produced and published on a residual basis — through reverse engineering. This approach may seem quite simple and convenient, but it contradicts contract work. This is when there is a component with a predefined scheme of operation. The developer implements it according to this scheme and task, the component undergoes testing, and the client receives a product that meets the analyst's vision. Reverse engineering, however, throws a product onto the market that simply exists: with workarounds, strange solutions, and makeshift options instead of the required functionality.
  4. I gjithë fluksi i kërkesave që vinte përmes API-it mund të analizohej sa për log-un e Nginx-it ose të serverit të aplikacionit. Kjo nuk lejonte që të lokalizoheshin fushat tematike, përveç se të ndaheshin sipas përdoruesve dhe abonentëve. Nëse nuk ka mundësi për të rregulluar regjistrimin e aplikacionit ose të klientëve, është e pamundur të analizosh situatën. Ky problem ka ndikuar më pak në zhvillimin e API-it, ai është më shumë për kuptimin e kërkesës së tij dhe mbushjes me funksionalitet.

Përpjekja e dytë: REST API

NĂ« vitin 2010, ne pĂ«rpiqeshim tĂ« ndĂ«rtonim njĂ« sistem shkĂ«mbimi me kontabilitetin online – Buxhoft. Nuk ia arritĂ«m. MegjithatĂ«, gjatĂ« procesit tĂ« integrimit u krijua njĂ« API funksional: njĂ« shĂ«rbim REST pĂ«r shkĂ«mbim, ku nuk kishte liri si pĂ«r thirrjet nĂ« operacione nĂ« formĂ«n e thirrjeve RPC. TĂ« gjitha komunikimet me API-in u reduktuan nĂ« mĂ«nyrĂ«n standarde pĂ«r REST: emri i entitetit Ă«shtĂ« i pĂ«rfshirĂ« nĂ« vargun e kĂ«rkesĂ«s, dhe operacioni qĂ« kryhet me tĂ« pĂ«rcaktohet me metodĂ«n http. Ne shtuam filtrimin sipas momentit tĂ« azhurnimit tĂ« entiteteve, dhe pĂ«rdoruesit morĂ«n mundĂ«sinĂ« tĂ« ndĂ«rtojnĂ« replikimin me sistemet e tyre.

NĂ« tĂ« njĂ«jtin vit u shfaq API pĂ«r shkarkimin e mbetjeve tĂ« magazinĂ«s dhe produkteve. PjesĂ«t mĂ« tĂ« çmueshme tĂ« sistemit u bĂ«nĂ« tĂ« aksesueshme pĂ«r pĂ«rdoruesit pĂ«rmes API-it — shkĂ«mbimi i dokumenteve fillestare dhe tĂ« dhĂ«nat llogaritĂ«se pĂ«r mbetjet dhe cost-in e produkteve.

Në dhjetor 2015, RetailCRM publikoi bibliotekën e parë të palës së tretë për qasjen në API-in tonë. Ajo filloi të përdorej mjaft aktivisht, ndërkohë që popullariteti i shërbimit rritej në përgjithësi, dhe ngarkesa në API rritej më shpejt se ngarkesa në ndërfaqen e internetit. Një herë rritja u shndërrua në një shpërthim ngarkese.

Krijuam API - shkatërroj XML (dy)

Krijuam API - shkatërroj XML (dy)

Dhe ky shpĂ«rthim, tĂ« cilin e tregon стрДлĐșа слДĐČа, i la tĂ« habitur plotĂ«sisht serverin qĂ« shĂ«rbente API-in tonĂ«. Pasi kaluam njĂ« javĂ« duke e shqyrtuar se çfarĂ« pikĂ«risht po gjeneronte kĂ«tĂ« ngarkesĂ«. Doli se ishin ato kĂ«rkesa, tĂ« transmetuara nĂ« API-in tonĂ« nga klientĂ«t. Rreth 50 klientĂ« e konsumuan tĂ« gjithĂ« ngarkesĂ«n. AtĂ«herĂ« kuptuam njĂ« nga gabimet tona — mungesĂ«n e plotĂ« tĂ« kufijve.

Si në përfundim ne vendosëm një kufi mbi numrin e kërkesave të njëkohshme. Nga një llogari tani mund të hapen jo më shumë se dy kërkesa në të njëjtën kohë. Kjo është e mjaftueshme për të punuar në mënyrën e replikimit për shkëmbimin e të dhënave në modën e paketave. Ata që donin të na përdorin si backend, nga ky moment duhej të përputhen më shumë me tarifat, pasi filluan të implementojnë një punë me disa llogari në softueret e tyre.

Rregullojmë gjërat

Që nga viti 2014, kërkesa për API-në ekzistuese është bërë një pjesë e rëndësishme e biznesit, dhe vetë API ka gjeneruar volumenin më të madh të të dhënave në shkëmbimin e të dhënave me klientët. Në vitin 2015 nisëm projektin për të rregulluar API-në. Zgjodhëm formatin JSON në vend të XML dhe filluam ta ndërtojmë atë mbi karakteristikat që zbuluam gjatë zbatimit të versionit të mëparshëm:

  1. Aftësi për të menaxhuar versionet. Versionimi lejon zhvillimin e një versioni të ri pa prekur aplikacionin ekzistues dhe pa e shqetësuar funksionimin e përdoruesve.
  2. Aftësia për përdoruesin për të parë metadata në përgjigjen që merr.
  3. Aftësia për shkëmbimin e dokumenteve të mëdha. Nëse ne përpunojmë një dokument me numër pozita më tepër se 4-5 mijë, kjo bëhet një problem për serverin: transaksion i gjatë, kërkesë http e gjatë. Kemi ndërtuar një mekanizëm special që lejon përditësimin e dokumentit në pjesë dhe menaxhimin e pozicioneve të veçanta të këtij dokumenti duke i dërguar ato në server.
  4. Mjetet për replikimin ishin gjithashtu në versionin e mëparshëm.
  5. KufijtĂ« mbi ngarkesĂ«n — si trashĂ«gimi e gabimeve nĂ« tĂ« cilat kemi rĂ«nĂ« nĂ« versionin e mĂ«parshĂ«m. VendosĂ«m kufij mbi numrin e kĂ«rkesave nĂ« njĂ« interval kohe, numrin e kĂ«rkesave paralele dhe kĂ«rkesat nga njĂ« ip-adresĂ«.

Që nga ajo kohë kemi lëshuar dy versione të vogla të API-së dhe kemi nisur disa API të specializuara, por si një tërësi, qasja ka mbetur e pandryshuar. Formati i përditësuar i shkëmbimit dhe arkitektura e re kanë lejuar rregullimin e dobësive në API shumë më shpejt.

API e Mojosklad sot

Sot API e Mojosklad zgjidh shumë probleme:

  • shkĂ«mbimi i tĂ« dhĂ«nave me dyqanet online, sistemet e llogarive, bankat;
  • marrja e tĂ« dhĂ«nave tĂ« llogarive, raportet;
  • pĂ«rdorimi si backend pĂ«r aplikacionet klient — aplikacionet tona mobile dhe kasa desktop punojnĂ« nĂ«pĂ«rmjet API-sĂ«.
  • dĂ«rgimi i njoftimeve pĂ«r ndryshimet e tĂ« dhĂ«nave nĂ« MĂ«ngjarĂ«m — webhooks;
  • telefonia;
  • sistemet e besnikĂ«risĂ«.

Në baza të API, drejtori ynë i përgjithshëm Askar Rakhimberdiev rhino për katër orë shkroi një telegram-bot që merr përmes API mbetjet: github.com/arahimberdiev/com-lognex-telegram-moysklad-stock

Tani numra të thatë.

Këtu është statistika jonë për API-në e vjetër REST:

  • 400 kompani;
  • 600 pĂ«rdorues;
  • 2 milion kĂ«rkesa nĂ« ditĂ«;
  • 200 GB/ditĂ« trafiku i dalĂ«.

Dhe ja për çfarë kemi arritur me të gjitha API-të e Mëngjarës:

  • mĂ« shumĂ« se 70 integrime (disa prej tyre mund tĂ« shihen kĂ«tu www.moysklad.ru/integratsii);
  • 8500 kompani;
  • 12,000 pĂ«rdorues;
  • 46 milion kĂ«rkesa nĂ« ditĂ«;
  • 2 TB/ditĂ« trafiku i dalĂ«.

ÇfarĂ« pason

Planet për zhvillimin e API-së janë në diskutim aktiv. Ne përpiqemi të marrim parasysh përvojën e përdorimit, që na ofrojnë përdoruesit. Nuk gjithmonë dhe jo gjithçka arrijmë ta bëjmë menjëherë, por një version i ri i API-së me metadatat më të përshtatshme dhe një strukturë më të thjeshtë, OAuth për autentifikim, API për integrimin në ndërfaqen e aplikacioneve është afër.

Rrjedhni për lajmet në një faqe të veçantë për zhvilluesit e integrimeve me Mëngjarën: dev.moysklad.ru.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster