{"id":30792,"date":"2019-10-31T21:37:27","date_gmt":"2019-10-31T18:37:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/nash-opyt-sozdaniya-api-gateway\/"},"modified":"2019-10-31T21:37:27","modified_gmt":"2019-10-31T18:37:27","slug":"nash-opyt-sozdaniya-api-gateway","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","title":{"rendered":"Meie kogemus API Gateway loomisel","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>M\u00f5ned ettev\u00f5tted, sealhulgas meie klient, arendavad toodet partnerv\u00f5rgustiku kaudu. N\u00e4iteks on suured internetipoodid integreeritud tarnehalduss\u00fcsteemiga \u2013 tellite toote ja saad peagi j\u00e4lgimisnumbriga paki. Teine n\u00e4ide on see, et koos lennupiletiga ostetakse kindlustus v\u00f5i pilet aeroekspressile.<\/p>\n<p>Selleks kasutatakse \u00fchte API-d, mille peame partneritele API Gateway kaudu esitama. Selle \u00fclesande me lahendasime. Selles artiklis r\u00e4\u00e4gime \u00fcksikasjadest.<\/p>\n<p>Antud: \u00f6kos\u00fcsteem ja API-portaal koos liidese ning registreeritud kasutajatega, kes saavad teavet jne. Me peame looma mugava ja usaldusv\u00e4\u00e4rse API Gateway. Protsessi k\u00e4igus pidime tagama <\/p>\n<ul>\n<li>registreerimise, <\/li>\n<li>\u00fchenduse kontrolli API-ga, <\/li>\n<li>kasutajate tegevuse j\u00e4lgimise l\u00f5pp-s\u00fcsteemis, <\/li>\n<li>\u00e4rin\u00e4itajate arvestuse.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel\" src=\"\/wp-content\/uploads\/2019\/04\/4fa66fd4573af16b0bc78aa61173f907.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nArtiklis r\u00e4\u00e4gime oma kogemustest API Gateway loomisel, mille k\u00e4igus lahendasime j\u00e4rgmised \u00fclesanded:<\/p>\n<ul>\n<li>kasutaja autentimine,<\/li>\n<li>kasutaja volitamine,<\/li>\n<li>algse p\u00e4ringu modifitseerimine,<\/li>\n<li>p\u00e4ringu edastamine,<\/li>\n<li>vastuse j\u00e4rel t\u00f6\u00f6tlemine.<\/li>\n<\/ul>\n<p>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nOn kaks t\u00fc\u00fcpi API haldust:<\/p>\n<p>1. Standardne, mis t\u00f6\u00f6tab j\u00e4rgmiselt. Enne \u00fchendamist testib kasutaja v\u00f5imalusi, seej\u00e4rel maksab ja integreerib oma veebisaidile. Seda kasutavad k\u00f5ige sagedamini v\u00e4ike ja keskmine \u00e4ri.<\/p>\n<p>2. Suur B2B API haldus, kus ettev\u00f5te teeb esmalt \u00e4rilise otsuse \u00fchendamiseks, becomes partner of the company with a contractual obligation, p\u00e4rast mida liitub API-ga. Ja alles p\u00e4rast k\u00f5igi formaalsuste lahendamist saab ettev\u00f5te testimis\u00f5iguse, l\u00e4bib testimise ja j\u00f5uab tootmisse. Kuid see pole v\u00f5imalik ilma juhtimisotsuseta \u00fchendamiseks. <\/p>\n<p><img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel\" src=\"\/wp-content\/uploads\/2019\/04\/b9ab53d6c64d5a971c4950cd340ad42e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3> Meie lahendus<\/h3>\n<p>\nSelles osas r\u00e4\u00e4gime API Gateway loomise protsessist.<\/p>\n<p>API-k\u00e4ideldava l\u00f5ppkasutaja sihtgrupp on meie kliendi partnerid. Iga\u00fche jaoks on meil juba vajalikud lepingud olemas. Peame lihtsalt laiendama funktsionaalsust, m\u00e4rkides juurdep\u00e4\u00e4su v\u00e4ravas. Seega on vaja kontrollitud protsessi \u00fchendamiseks ja haldamiseks.<\/p>\n<p>Muidugi oleks olnud v\u00f5imalik v\u00f5tta m\u00f5ni valmis lahendus API haldamise ja API Gateway loomise \u00fclesande t\u00e4itmiseks. N\u00e4iteks v\u00f5iks see olla<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/api-management\/\"> Azure API Management<\/a><\/noindex>. Meile see ei sobinud, sest meie olukorras oli meil juba olemas API-portaal ja hiiglaslik \u00f6kos\u00fcsteem selle \u00fcmber. K\u00f5ik kasutajad olid juba registreeritud, nad m\u00f5istsid, kust ja kuidas nad saavad vajalikku teavet. API-portaalis olid juba olemas vajalikud liidesed, me vajasime vaid API Gatewayd. Selle arendusega me tegelikult tegelesime. <\/p>\n<p>Seda, mida me nimetame API Gatewayks \u2014 on omamoodi proks. Siin oli meil taas valik \u2014 kas kirjutada oma proks v\u00f5i valida juba midagi valmiskujul. Sellel juhul l\u00e4ksime teist teed ja valisime kombinatsiooni nginx+Lua. Miks? Me vajasime usaldusv\u00e4\u00e4rset, testitud tarkvara, mis toetaks skaleerimist. Me ei soovinud p\u00e4rast rakendamist kontrollida ei \u00e4ri loogika \u00f5igsust ega proksi t\u00f6\u00f6 \u00f5igsust. <\/p>\n<p>Igal veebiserveril on p\u00e4ringu t\u00f6\u00f6tlemise konveier. Nginxi puhul n\u00e4eb see v\u00e4lja j\u00e4rgmiselt:<\/p>\n<p><img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel\" src=\"\/wp-content\/uploads\/2019\/04\/b4cba1d37cc769202f92df052b45c77e.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n(skeem on <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openresty\/lua-nginx-module\">GitHub Lua Nginx<\/a><\/noindex>)<\/p>\n<p>Meie eesm\u00e4rk oli integreeruda sellesse konveierisse sel hetkel, kus me saame algset p\u00e4ringut modifitseerida. <\/p>\n<p>Me tahame luua l\u00e4bipaistva proksi, et funktsionaalselt j\u00e4\u00e4ks p\u00e4ring selliseks, nagu ta tuli. Me lihtsalt kontrollime juurdep\u00e4\u00e4su l\u00f5plikule API-le, aitame p\u00e4ringul sinna j\u00f5uda. Juhul, kui p\u00e4ring oli vale, peaks vea n\u00e4itama l\u00f5plik API, mitte meie. Ainus p\u00f5hjus, miks me saame p\u00e4ringu tagasi l\u00fckata, on p\u00f5hjendamatud kliendi juurdep\u00e4\u00e4su\u00f5igused. <\/p>\n<p>Nginxi jaoks on juba olemas <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/openresty\/lua-nginx-module\">laiendamine<\/a><\/noindex> . Tundub, et <noindex><a rel=\"nofollow\" href=\"http:\/\/www.lua.ru\/\">Lua<\/a><\/noindex>. Lua on skriptimiskeel, see on v\u00e4ga kerge ja lihtne \u00f5ppida. Seega, vajalik loogika teostati Lua abiga. <\/p>\n<p>Nginxi konfiguratsioon (analoogia rakenduse marsruudiga), kus kogu t\u00f6\u00f6 toimub, on \u00fcsna arusaadav. Siin on t\u00e4helepanuv\u00e4\u00e4rne viimane direktiiv \u2014 post_action.<\/p>\n<pre><code class=\"nginx\">location \/middleware {\n      more_clear_input_headers Accept-Encoding;\n      lua_need_request_body on;\n      rewrite_by_lua_file 'middleware\/rewrite.lua';\n      access_by_lua_file 'middleware\/access.lua';\n      proxy_pass https:\/\/someurl.com;\n      body_filter_by_lua_file 'middleware\/body_filter.lua';\n      post_action \/process_session;\n}\n<\/code><\/pre>\n<p>\nVaatame, mis juhtus selle konfiguratsiooniga: <br \/>\n<b>more_clear_input_headers<\/b> \u2014 puhastab direktiivide j\u00e4rel m\u00e4rgitud p\u00e4iste v\u00e4\u00e4rtused. <br \/>\n<b>lua_need_request_body <\/b>\u2014 reguleerib, kas tuleks lugeda algne p\u00e4ringu keha enne direktiivide rewrite\/access\/access_by_lua t\u00e4itmist v\u00f5i mitte. Vaikimisi ei loe nginx kliendi p\u00e4ringu keha ning kui teil on sellele juurdep\u00e4\u00e4s vajalik, peab see direktiiv olema v\u00e4\u00e4rtusega on.<br \/>\n<b>rewrite_by_lua_file<\/b> \u2014 tee skripti, kus on kirjeldatud p\u00e4ringu muutmise loogika<br \/>\n<b>access_by_lua_file <\/b>\u2014 tee skripti, kus on kirjeldatud loogika, mis kontrollib juurdep\u00e4\u00e4su olemasolu ressursile. <br \/>\n<b>proxy_pass <\/b>\u2014 url, kuhu p\u00e4ring edastatakse.<br \/>\n<b>body_filter_by_lua_file <\/b>\u2014 tee skripti, kus on kirjeldatud loogika p\u00e4ringu filtreerimiseks enne, kui see klientidele tagastatakse.<br \/>\nJa l\u00f5puks, <b>post_action<\/b> \u2014 ametlikult dokumenteerimata direktiiv, millega saab teha muid toiminguid p\u00e4rast seda, kui vastus on kliendile antud. <\/p>\n<p>J\u00e4rgnevalt r\u00e4\u00e4gime j\u00e4rjestikku, kuidas me oma \u00fclesandeid lahendasime.<\/p>\n<h3>Autoriseerimine\/ autentimine ja p\u00e4ringu muutmine<\/h3>\n<p>\n<b>Autoriseerimine<\/b><\/p>\n<p>Autoriseerimist ja autentimist teostasime sertifikaatide kaudu. On olemas juursertifikaat. Iga uue kliendi jaoks genereeritakse oma isiklik sertifikaat, millega ta saab API-le juurde p\u00e4\u00e4seda. See sertifikaat seadistatakse nginx'i serveri seadete l\u00f5igus.<\/p>\n<pre><code class=\"nginx\">ssl on;\nssl_certificate \/usr\/local\/openresty\/nginx\/ssl\/cert.pem;\nssl_certificate_key \/usr\/local\/openresty\/nginx\/ssl\/cert.pem;\nssl_client_certificate \/usr\/local\/openresty\/nginx\/ssl\/ca.crt;\nssl_verify_client on;<\/code><\/pre>\n<p>\n<b>Muutmine<\/b><\/p>\n<p>T\u00f5statub \u00f5igustatud k\u00fcsimus: mida teha sertifitseeritud kliendiga, kui me \u00e4kki soovime ta s\u00fcsteemist v\u00e4lja l\u00fclitada? Ei ole ju m\u00f5istlik sertifikaate k\u00f5igi teiste klientide jaoks uuesti v\u00e4lja anda. <\/p>\n<p>Nii j\u00f5udsime sujuvalt j\u00e4rgmise \u00fclesande juurde \u2014 algse p\u00e4ringu muutmine. Kliendi algne p\u00e4ring ei ole \u00fcldiselt l\u00f5pp-s\u00fcsteemi jaoks kehtiv. \u00dcks \u00fclesandeid on lisada p\u00e4ringusse puuduolevaid osi, et muuta see kehtivaks. Probleem on selles, et puuduolevad andmed on igale kliendile erinevad. Me teame, et klient tuleb meile sertifikaadiga, millest saame v\u00f5tta j\u00e4lje ja v\u00e4lja t\u00f5mmata kliendi vajalikud andmed andmebaasist. <\/p>\n<p>Kui mingil hetkel on vajalik klient meie teenusest v\u00e4lja l\u00fclitada, kaovad tema andmed andmebaasist ja ta ei saa enam midagi teha. <\/p>\n<h3>T\u00f6\u00f6tamine kliendi andmetega<\/h3>\n<p>\nMeil oli vaja tagada lahenduse k\u00f5rge k\u00e4ttesaadavus, eriti nende andmete saamise osas. Probleem seisneb selles, et andmete esmasteks allikateks on kolmandate osapoolte teenused, mis ei garanteeri katkestusteta ja piisavalt k\u00f5rget t\u00f6\u00f6kiirust. <\/p>\n<p>Seet\u00f5ttu pidi meil tagama kliendiandmete k\u00f5rge k\u00e4ttesaadavus. T\u00f6\u00f6riistaks valisime <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.org\/\">Hazelcast<\/a><\/noindex>, mis pakub meile:<\/p>\n<ul>\n<li>kiire juurdep\u00e4\u00e4s andmetele,<\/li>\n<li>v\u00f5imalus korraldada kluster mitmest s\u00f5lmest replitseeritud andmetega eri s\u00f5lmedes.<\/li>\n<\/ul>\n<p>\nMe j\u00e4rgnesime k\u00f5ige lihtsamale andmeedastamise strateegiale vahem\u00e4lusse:<\/p>\n<p><img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel\" src=\"\/wp-content\/uploads\/2019\/04\/0175d6f0fda543566ab13d4cae9d8cc1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nT\u00f6\u00f6tamine l\u00f5ppkasutaja s\u00fcsteemiga toimub sessioonide raames ja on piirang maksimaalsete sessioonide arvu osas. Kui klient ei ole sessiooni suletud, peame me selle l\u00f5petama. <\/p>\n<p>Teave avatud sessiooni kohta tuleb l\u00f5ppkasutaja s\u00fcsteemist ja see t\u00f6\u00f6deldakse esmalt Lua poolel. Otsustasime kasutada Hazelcasti nende andmete salvestamiseks t\u00f6\u00f6taskuga, mis on kirjutatud .NET-is. Seej\u00e4rel kontrollime teatud aja jooksul avatud sessioonide eluj\u00f5ulisust ja sulgeme aegunud sessioonid. <\/p>\n<h3>Juurdep\u00e4\u00e4s Hazelcastile nii Lua-st kui ka .NET-ist<\/h3>\n<p>\nLua-le, mis t\u00f6\u00f6taks Hazelcastiga, kliente ei ole, kuid Hazelcastil on REST API, mida me otsustasime kasutada. .NET-i jaoks on olemas <noindex><a rel=\"nofollow\" href=\"https:\/\/hazelcast.org\/clients\/net\/\">sattus tausta<\/a><\/noindex>, mille kaudu kavatsesime saada juurdep\u00e4\u00e4su Hazelcasti andmetele .NET poolel. Kuid sellega oli probleeme.<\/p>\n<p><img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel\" src=\"\/wp-content\/uploads\/2019\/04\/52c9437e5cd16073b56afc55a4f415da.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nREST-i kaudu andmete salvestamisel ja .NET kliendi kaudu v\u00e4ljav\u00f5ttel kasutatakse erinevaid serialiseerijat\/dserialiseringut. Seet\u00f5ttu ei ole v\u00f5imalik andmeid salvestada REST-i kaudu ja neid v\u00e4lja v\u00f5tta .NET kliendi kaudu ning vastupidi. <\/p>\n<p>Kui kedagi huvitab, saame sellest probleemist r\u00e4\u00e4kida p\u00f5hjalikumalt eraldi artiklis. Spoiler \u2014 joonisel. <\/p>\n<p><img decoding=\"async\" alt=\"Meie kogemus API Gateway loomisel\" src=\"\/wp-content\/uploads\/2019\/04\/73bb11214fdaeca86ef10cdbd788e288.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Logimine ja monitooring<\/h3>\n<p>\nMeie ettev\u00f5tte standard logimiseks .NET-is on Serilog, k\u00f5ik logid j\u00f5uavad l\u00f5puks Elasticsearchi, me anal\u00fc\u00fcsime neid Kibana kaudu. Soovisime midagi sarnast teha ka sel juhul. Ainus <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/DhavalKapil\/elasticsearch-lua\">sattus tausta<\/a><\/noindex> Lua-le t\u00f6\u00f6ks Elasticus, mis leiti, katkes esimesel require-l. Ja me kasutasime Fluentd-d. <\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.fluentd.org\/\">Fluentd<\/a><\/noindex> \u2014 avatud l\u00e4htekoodiga lahendus, et tagada rakenduse logimise \u00fchtne kiht. See v\u00f5imaldab koguda logisid erinevatest rakenduse kihtidest ja seej\u00e4rel edastada need \u00fchte allikasse. <\/p>\n<p>API Gateway t\u00f6\u00f6tab K8S-is, seega otsustasime lisada konteineri fluentd samasse podi, et kirjutada logisid olemasolevasse avatud tcp porti fluentd. <\/p>\n<p>Uurisime ka, kuidas k\u00e4itub fluentd, kui tal pole \u00fchendust Elasticsearchiga. Kaks p\u00e4eva j\u00e4rjest edastati pidevalt p\u00e4ringuid v\u00e4ravasse, fluentd-sse saadeti logisid, kuid fluentd-l oli Elasticu IP blokeeritud. P\u00e4rast \u00fchenduse taastamist edastas fluentd k\u00f5ik logid sujuvalt Elasticisse.<\/p>\n<h3>Kokkuv\u00f5te<\/h3>\n<p>\nValitud l\u00e4henemisviis v\u00f5imaldas meil tuua t\u00f5eliselt t\u00f6\u00f6tava toote tootmisse vaid 2,5 kuu jooksul.<\/p>\n<p>Kui kunagi peaksite tegelema selliste asjadega, soovitame k\u00f5igepealt selgelt m\u00f5ista, millist \u00fclesannet te lahendada p\u00fc\u00fcdlete ja millised ressursid teil juba on. Olge t\u00e4helepanelik API halduss\u00fcsteemide integreerimise raskuste suhtes. <\/p>\n<p>M\u00f5istke, mida te tegelikult arendama asute \u2014 ainult \u00e4riloogikat p\u00e4ringute t\u00f6\u00f6tlemiseks v\u00f5i, nagu meie puhul, kogu proksi. \u00c4ra unusta, et k\u00f5ik, mida te ise teete, peab hiljem olema p\u00f5hjalikult testitud.<br \/>\n<br \/>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/true_engineering\/blog\/446438\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u0440\u0443\u043f\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0441\u043e \u0441\u043b\u0443\u0436\u0431\u043e\u0439 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u2014 \u0432\u044b \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0435 \u0442\u043e\u0432\u0430\u0440 \u0438 \u0432\u0441\u043a\u043e\u0440\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0435 \u0442\u0440\u0435\u043a\u0438\u043d\u0433\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u043f\u043e\u0441\u044b\u043b\u043a\u0438. \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0430\u0432\u0438\u0430\u0431\u0438\u043b\u0435\u0442\u043e\u043c \u0432\u044b \u043f\u043e\u043a\u0443\u043f\u0430\u0435\u0442\u0435 \u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0443 \u0438\u043b\u0438 \u0431\u0438\u043b\u0435\u0442 \u043d\u0430 \u0430\u044d\u0440\u043e\u044d\u043a\u0441\u043f\u0440\u0435\u0441\u0441. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d API, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0430\u043c \u0447\u0435\u0440\u0435\u0437 API Gateway. \u042d\u0442\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":22777,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30792","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f API Gateway | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:37:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:37:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Meie kogemus API Gateway loomisel | ProHoster","description":"M\u00f5ned ettev\u00f5tted, sealhulgas meie klient, arendavad toodet l\u00e4bi partnerite v\u00f5rgu.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041d\u0430\u0448 \u043e\u043f\u044b\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f API Gateway | ProHoster","og:description":"\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043d\u0430\u0448 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a, \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u044e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u043a\u0443\u044e \u0441\u0435\u0442\u044c.","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/nash-opyt-sozdaniya-api-gateway","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:37:27+00:00","article:modified_time":"2019-10-31T18:37:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30792","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 03:01:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 17:05:31","updated":"2026-01-21 03:01:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/30792","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=30792"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/30792\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/22777"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=30792"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=30792"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=30792"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}