JSON-RPC? Ya ẹtan REST

JSON-RPC? Ya ẹtan REST

Mo ni idaniloju pe akọle naa fa idahun ti ilera - “daradara, o tun bẹrẹ…” Ṣugbọn jẹ ki n gba akiyesi rẹ fun awọn iṣẹju 5-10, ati pe Emi yoo gbiyanju lati ma ṣe adehun awọn ireti rẹ.

Ilana ti nkan naa yoo jẹ bi atẹle: a mu alaye stereotypical ati “iseda” ti ifarahan ti stereotype yii ti han. Mo nireti pe eyi yoo gba ọ laaye lati wo yiyan ti paragisi paṣipaarọ data ninu awọn iṣẹ akanṣe rẹ lati igun tuntun kan.

Lati le ṣalaye nipa kini RPC jẹ, Mo daba lati gbero boṣewa naa JSON-RPC 2.0. Pẹlu REST ko si asọye. Ati pe ko yẹ ki o jẹ. Ohun gbogbo ti o nilo lati mọ nipa REST - ko ṣe iyatọ si HTTP.

Awọn ibeere RPC yiyara ati daradara siwaju sii nitori wọn gba ọ laaye lati ṣe awọn ibeere ipele.

Oro naa ni pe ni RPC o le pe awọn ilana pupọ ni ẹẹkan ni ibeere kan. Fun apẹẹrẹ, ṣẹda olumulo kan, ṣafikun avatar si i ati, ni ibeere kanna, ṣe alabapin si awọn akọle kan. Kan kan ìbéèrè, ati bi Elo anfani!

Lootọ, ti o ba ni ipade ẹhin kan ṣoṣo, yoo dabi yiyara pẹlu ibeere ipele kan. Nitoripe awọn ibeere REST mẹta yoo nilo awọn orisun ni igba mẹta diẹ sii lati ipade kan lati fi idi awọn asopọ mulẹ.

JSON-RPC? Ya ẹtan REST

Ṣe akiyesi pe ibeere akọkọ ninu ọran ti REST gbọdọ da ID olumulo pada lati le ṣe awọn ibeere atẹle. Eyi ti o tun ni odi ni ipa lori abajade gbogbogbo.

Ṣugbọn iru awọn amayederun le ṣee rii nikan ni awọn solusan inu ile ati Idawọlẹ. Bi ohun asegbeyin ti, ni kekere WEB ise agbese. Ṣugbọn awọn ojutu WEB ni kikun, ati paapaa awọn ti a pe ni HighLoad, ko tọ lati kọ. Awọn amayederun wọn gbọdọ pade awọn ibeere ti wiwa giga ati fifuye. Ati pe aworan naa n yipada.

JSON-RPC? Ya ẹtan REST

Awọn ikanni iṣẹ ṣiṣe amayederun labẹ oju iṣẹlẹ kanna ti samisi ni alawọ ewe. Ṣe akiyesi bi RPC ṣe huwa ni bayi. Ibeere naa nlo awọn amayederun lori ẹsẹ kan nikan lati iwọntunwọnsi si ẹhin. Lakoko ti REST tun padanu ni ibeere akọkọ, o ṣe fun akoko sisọnu nipa lilo gbogbo awọn amayederun.

O to lati tẹ sinu iwe afọwọkọ kii ṣe awọn ibeere meji fun imudara, ṣugbọn, sọ, marun tabi mẹwa… ati idahun si ibeere naa “Ta ni o ṣẹgun ni bayi?” di koyewa.

Mo daba lati wo iṣoro ti o gbooro paapaa. Aworan naa fihan bi a ṣe lo awọn ikanni amayederun, ṣugbọn awọn amayederun ko ni opin si awọn ikanni. Ẹya pataki ti awọn amayederun fifuye giga jẹ awọn caches. Jẹ ki ká bayi gba diẹ ninu awọn Iru olumulo artifact. Leralera. Jẹ ká sọ 32 igba.

JSON-RPC? Ya ẹtan REST

Wo bii awọn amayederun RPC ti ni ilọsiwaju ni pataki lati pade awọn ibeere ti ẹru giga. Ohun naa ni pe REST nlo agbara kikun ti ilana HTTP, ko dabi RPC. Ninu aworan atọka ti o wa loke, agbara yii jẹ imuse nipasẹ ọna ibeere - GET.

Awọn ọna HTTP, ninu awọn ohun miiran, ni awọn ilana caching. O le wa wọn ninu iwe ni HTTP. Fun RPC, awọn ibeere POST ni a lo, eyiti a ko ka si arapotent, iyẹn ni, awọn atunwi ti awọn ibeere POST kanna le da awọn abajade oriṣiriṣi pada (fun apẹẹrẹ, lẹhin ti asọye kọọkan ti firanṣẹ, ẹda asọye yii yoo han) (orisun).

Nitoribẹẹ, RPC ko lagbara lati lo awọn caches amayederun daradara. Eyi nyorisi iwulo lati “gbewọle” awọn kaṣe sọfitiwia. Aworan naa fihan Redis ni ipa yii. Kaṣe sọfitiwia, ni ọna, nilo olupilẹṣẹ lati ṣafikun afikun koodu koodu ati awọn ayipada akiyesi ni faaji.

Jẹ ki a ka iye awọn ibeere REST ati RPC “ti bi” si awọn amayederun labẹ ero?

Awọn ibeere
Apo-iwọle
lati se afehinti ohun
si DBMS
si kaṣe rirọ (Redis)
TOTAL

REST
1 / 32 *
1
1
0
3 / 35

CPR
32
32
1
31
96

[*] ninu ọran ti o dara julọ (ti o ba lo kaṣe agbegbe) ibeere 1 (ọkan!), Ninu ọran ti o buruju 32 awọn ibeere ti nwọle.

Ti a ṣe afiwe si ero akọkọ, iyatọ jẹ idaṣẹ. Bayi anfani ti REST di mimọ. Sugbon mo daba ko duro nibẹ. Awọn amayederun idagbasoke pẹlu CDN kan. Nigbagbogbo o tun yanju ọran ti koju awọn ikọlu DDoS ati DoS. A gba:

JSON-RPC? Ya ẹtan REST

Eyi ni ibiti awọn nkan ti buru gaan fun RPC. RPC nìkan ko lagbara lati fi ẹru iṣẹ si CDN kan. A le gbẹkẹle awọn eto nikan lati koju awọn ikọlu.

Ṣe o ṣee ṣe lati pari nibi? Ati lẹẹkansi, rara. Awọn ọna HTTP, gẹgẹbi a ti sọ loke, ni "idan" tiwọn. Ati pe kii ṣe laisi idi pe ọna GET jẹ lilo pupọ lori Intanẹẹti. Ṣe akiyesi pe ọna yii ni anfani lati wọle si nkan ti akoonu, ni anfani lati ṣeto awọn ipo ti awọn eroja amayederun le tumọ ṣaaju gbigbe iṣakoso si koodu rẹ, ati bẹbẹ lọ. Gbogbo eyi n gba ọ laaye lati ṣẹda irọrun, awọn amayederun iṣakoso ti o le mu awọn ṣiṣan ti o tobi pupọ ti awọn ibeere. Sugbon ni RPC ọna yi... ti wa ni bikita.

Nitorinaa kilode ti arosọ pe awọn ibeere ipele (RPC) yara yiyara tobẹẹ bi? Tikalararẹ, o dabi si mi pe pupọ julọ awọn iṣẹ akanṣe ko de ipele idagbasoke nibiti REST ni anfani lati ṣafihan agbara rẹ. Pẹlupẹlu, ni awọn iṣẹ-ṣiṣe kekere, o jẹ diẹ setan lati fi awọn ailera rẹ han.

Yiyan REST tabi RPC kii ṣe yiyan atinuwa ti ẹni kọọkan ninu iṣẹ akanṣe kan. Yi wun gbọdọ pade awọn ibeere ti ise agbese. Ti iṣẹ akanṣe kan ba ni anfani lati fun pọ ohun gbogbo ti o le gaan kuro ninu REST, ati pe o nilo gaan, lẹhinna REST yoo jẹ yiyan ti o tayọ.

Ṣugbọn ti o ba jẹ pe, lati le gba gbogbo awọn anfani ti REST, o nilo lati bẹwẹ awọn alamọja devops fun iṣẹ akanṣe lati ṣe iwọn awọn amayederun ni iyara, awọn alabojuto lati ṣakoso awọn amayederun, ayaworan lati ṣe apẹrẹ gbogbo awọn ipele ti iṣẹ WEB… ati iṣẹ akanṣe naa. , ni akoko kanna, ta awọn akopọ mẹta ti margarine ni ọjọ kan ... Emi yoo duro pẹlu RPC, nitori ... Ilana yii jẹ iwulo diẹ sii. Kii yoo nilo imọ jinlẹ ti bii awọn caches ati awọn amayederun ṣiṣẹ, ṣugbọn yoo dojukọ olupilẹṣẹ lori awọn ipe ti o rọrun ati oye si awọn ilana ti o nilo. Inu iṣowo yoo dun.

Awọn ibeere RPC jẹ igbẹkẹle diẹ sii nitori wọn le ṣe awọn ibeere ipele laarin iṣowo kan

Ohun-ini yii ti RPC jẹ anfani ti o daju, nitori O rọrun lati tọju data data ni ibamu. Ṣugbọn pẹlu REST o n ni idiju ati siwaju sii. Awọn ibeere le de ni aisedede si oriṣiriṣi awọn apa ẹhin.

“Aila-nfani” ti REST yii jẹ apa isipade ti anfani ti a ṣalaye loke - agbara lati lo gbogbo awọn orisun amayederun daradara. Ti awọn amayederun ba jẹ apẹrẹ ti ko dara, ati paapaa diẹ sii ti o ba jẹ pe faaji ti iṣẹ akanṣe ati ibi ipamọ data ni pato jẹ apẹrẹ ti ko dara, lẹhinna eyi jẹ irora nla gaan.

Ṣugbọn awọn ibeere ipele jẹ igbẹkẹle bi wọn ṣe dabi? Jẹ ki a wo ọran kan: a ṣẹda olumulo kan, ṣe alekun profaili rẹ pẹlu apejuwe kan ati firanṣẹ SMS kan pẹlu aṣiri lati pari iforukọsilẹ. Awon. awọn ipe mẹta ni ibeere ipele kan.

JSON-RPC? Ya ẹtan REST

Jẹ ká wo ni awọn aworan atọka. O ṣe afihan amayederun pẹlu awọn eroja wiwa giga. Awọn ikanni ibaraẹnisọrọ ominira meji wa pẹlu awọn ẹnu-ọna SMS. Ṣugbọn... kini a ri? Nigbati o ba nfi SMS ranṣẹ, aṣiṣe 503 waye - iṣẹ naa ko si fun igba diẹ. Nitori Fifiranṣẹ SMS jẹ akopọ ninu ibeere ipele kan, lẹhinna gbogbo ibeere gbọdọ wa ni yiyi pada. Awọn iṣe ninu DBMS ti fagile. Onibara gba aṣiṣe kan.

Nigbamii ti igbiyanju ni lotiri. Boya ibeere naa yoo lu ipade kanna lẹẹkansi ati tun pada aṣiṣe kan, tabi iwọ yoo ni orire ati pe yoo ṣe. Ṣugbọn ohun akọkọ ni pe o kere ju ni kete ti awọn amayederun wa ti ṣiṣẹ ni asan. Nibẹ je kan fifuye, sugbon ko si èrè.

O dara, jẹ ki a foju inu wo pe a ti ni wahala (!) Ati ronu nipasẹ aṣayan nigbati ibeere naa le pari ni aṣeyọri ni apakan. Ati pe a yoo gbiyanju lati pari iyokù lẹẹkansi lẹhin igba diẹ (Ewo ni? Ṣe iwaju pinnu?). Ṣugbọn awọn lotiri wà kanna. Ibeere lati firanṣẹ SMS ni aye 50/50 ti kuna lẹẹkansi.

Gba, lati ẹgbẹ alabara, iṣẹ naa ko dabi igbẹkẹle bi a ṣe fẹ… kini nipa REST?

JSON-RPC? Ya ẹtan REST

REST lo idan HTTP lẹẹkansi, ṣugbọn nisisiyi pẹlu awọn koodu esi. Nigbati aṣiṣe 503 ba waye lori ẹnu-ọna SMS, ẹhin ẹhin ṣe ikede aṣiṣe yii si iwọntunwọnsi. Oniwontunwonsi gba aṣiṣe yii ati laisi fifọ asopọ pẹlu alabara, firanṣẹ ibeere naa si ipade miiran, eyiti o ṣaṣeyọri ilana ibeere naa. Awon. onibara gba abajade ti o ti ṣe yẹ, ati awọn amayederun jẹrisi akọle giga rẹ ti "wiwọle pupọ". Inu olumulo dun.

Ati lẹẹkansi ti o ni ko gbogbo. Oniwọntunwọnsi ko kan gba koodu esi ti 503. Nigbati o ba n dahun, ni ibamu si boṣewa, o ni imọran lati pese koodu yii pẹlu akọsori “Tun gbiyanju-Lẹhin”. Akọsori naa jẹ ki o han gbangba si iwọntunwọnsi pe ko yẹ ki o da oju ipade yii ni ipa ọna yii fun akoko kan pato. Ati awọn ibeere atẹle lati firanṣẹ SMS yoo firanṣẹ taara si ipade ti ko ni awọn iṣoro pẹlu ẹnu-ọna SMS.

Gẹgẹbi a ti le rii, igbẹkẹle ti JSON-RPC jẹ apọju. Nitootọ, o rọrun lati ṣeto aitasera ninu database. Ṣugbọn ẹbọ, ninu ọran yii, yoo jẹ igbẹkẹle ti eto naa lapapọ.

Ipari naa jọra pupọ si ti iṣaaju. Nigbati awọn amayederun jẹ rọrun, kedere ti JSON-RPC jẹ pato afikun kan. Ti iṣẹ akanṣe naa ba pẹlu wiwa giga pẹlu ẹru giga, REST dabi pe o pe diẹ sii, botilẹjẹpe eka diẹ sii, ojutu.

Ibalẹ titẹsi si REST ti lọ silẹ

Mo ro pe itupalẹ ti o wa loke, ti n ṣalaye awọn stereotypes ti iṣeto nipa RPC, fihan gbangba pe ala fun titẹsi sinu REST jẹ laiseaniani ga ju sinu RPC. Eyi jẹ nitori iwulo fun oye ti o jinlẹ ti bii HTTP ṣe n ṣiṣẹ, ati iwulo lati ni oye ti o to nipa awọn eroja amayederun ti o wa ti o le ati pe o yẹ ki o lo ninu awọn iṣẹ akanṣe WEB.

Nitorinaa kilode ti ọpọlọpọ eniyan ro pe REST yoo rọrun? Ero ti ara mi ni pe ayedero ti o han gbangba wa lati REST ṣafihan ara wọn. Awon. REST kii ṣe ilana kan ṣugbọn imọran… REST ko ni boṣewa, awọn itọsọna kan wa… REST ko ni idiju diẹ sii ju HTTP. Ominira ti o han gbangba ati anarchy ṣe ifamọra “awọn oṣere ọfẹ”.

Nitoribẹẹ, REST ko ni idiju ju HTTP lọ. Ṣugbọn HTTP funrararẹ jẹ ilana ti a ṣe apẹrẹ daradara ti o ti fihan iye rẹ ni awọn ewadun. Ti ko ba si oye ti o jinlẹ ti HTTP funrararẹ, lẹhinna REST ko le ṣe idajọ.

Ṣugbọn nipa RPC - o le. O ti wa ni to lati ya awọn oniwe-sipesifikesonu. Nitorina ṣe o nilo Karachi JSON-RPC? Tabi o tun jẹ ẹtan REST? O pinnu.

Mo nireti ni otitọ pe Emi ko padanu akoko rẹ.

orisun: www.habr.com

Fi ọrọìwòye kun