Ruby-ի հետ վեբ քերիչ կառուցելիս ձեր տրամադրության տակ գտնվող ամենակարևոր գործիքներից մեկը HTTP հաճախորդն է: HTTP հաճախորդը ծրագրային գրադարան կամ շրջանակ է, որը հնարավորություն է տալիս ուղարկել և ստանալ HTTP հարցումներ (GET, POST, PUT և այլն) և պատասխաններ՝ վեբ սերվերների հետ հաղորդակցվելու համար: Ruby-ի էկոհամակարգում հասանելի HTTP-ի շատ հաճախորդների առկայության դեպքում դժվար կլինի ընտրել լավագույնը ձեր նախագծի համար:
Այս հոդվածում մենք կանդրադառնանք Ruby HTTP-ի հասանելի լավագույն հաճախորդներից մի քանիսին և կհամեմատենք դրանց առանձնահատկությունները, կատարումը և օգտագործման հեշտությունը: Անկախ նրանից, թե դուք կառուցում եք պարզ վեբ քերիչ, թե բարդ RESTful API, ճիշտ HTTP հաճախորդ ընտրելը կարող է փոխել ձեր նախագծի հաջողությունը: Այսպիսով, առանց ավելորդ անհանգստության, եկեք սուզվենք:
Գործոններ, որոնց վրա կորոշվի վարկանիշը
Թույլ տվեք պարզապես սահմանել, թե ինչ գործոններ եմ ես պատրաստվում հաշվի առնել Ruby HTTP հաճախորդներին նվազման կարգով դասակարգելու համար:
- Կատարում- Գրադարանը պետք է լինի արագ և թեթև: Այն պետք է կարողանա կարգավորել մեծ թվով միաժամանակյա հարցումներ՝ առանց պատասխանը հետաձգելու:
- Փաստաթղթավորում- Մաքուր և գնային փաստաթղթերը ևս մեկ գործոն են, որոնք կարող են գնահատել ցանկացած գրադարան: Այն պետք է լավ գրված լինի, որպեսզի մշակողները կարողանան արագ սկսել իրենց աշխատանքը:
- Համայնք- Համայնքը պետք է բավականաչափ մեծ լինի, որպեսզի կարողանա լուծել բոլոր այն խնդիրները, որոնք կարող են հանդիպել կոդավորման ժամանակ:
- Github Star- Վերջապես մենք կանդրադառնանք նաև գրադարանի ստացած աստղերի քանակին: Թիվը կօգնի մեզ հասկանալ դրա որակը և ընկալվող օգտակարությունը:
Արագությունը ստուգելու համար մենք պատրաստվում ենք գրադարանների հետ կատարել GET և POST հարցումներ, այնուհետև ստուգել ժամանակը:
GET հարցման համար մենք պատրաստվում ենք օգտագործել այս API-ն, իսկ POST հարցման համար՝ այս API-ն:
Դուք պետք է ստեղծեք հատուկ թղթապանակ, որտեղ մենք կպահենք մեր ruby ֆայլը: Ես ֆայլն անվանում եմ check.rb
: Դուք կարող եք ընտրել ցանկացած անուն, որը ցանկանում եք: Ֆայլը գործարկելու համար դուք պարզապես պետք է բացեք թղթապանակը ձեր տերմինալում և մուտքագրեք ruby check.rb
և սեղմեք Enter:
Մեր կարգավորումն ավարտված է, եկեք սկսենք գրադարանների փորձարկումը:
HTTParty
Դա ռուբինե գոհար է, որը պատրաստված է Net::HTTP
գրադարանի վերևում: Այն չափազանց պարզ է օգտագործման համար և ունի այնպիսի գործառույթներ, ինչպիսիք են հարցման պարամետրերը, հարցումների վերնագրերը և հիմնական նույնականացումը: Տեսնենք, թե ինչպես կարող ենք կատարել GET և POST հարցում httparty
-ով և չափել գրադարանի կողմից առաջադրանքն իրականացնելու համար պահանջվող ժամանակը:
Ժամանակը չափելու համար մենք կօգտագործենք Benchmark
գրադարանը:
Ստացեք հարցումը
require 'httparty' require 'benchmark' time = Benchmark.realtime do response = HTTParty.get('https://httpbin.org/get') puts response.body end puts "Request took #{time} seconds"
Այս օրինակի համար մենք օգտագործել ենք realtime()
մեթոդը, որը տրամադրվել է Benchmark
գրադարանի կողմից՝ չափելու հարցումով պահանջվող ժամանակը: Այն կվերադարձնի հարցումը կատարելու համար պահանջված վայրկյանների քանակը:
Այս կոդը գործարկելուց հետո ես ստանում եմ Request took 0.398039 seconds
տերմինալում: Դա նշանակում է, որ այս գրադարանին պահանջվեց 0.398
վայրկյան առաջադրանքն ավարտելու համար: Եկեք հիմա կատարենք POST հարցում:
POST հարցում
require 'httparty' require 'benchmark' time = Benchmark.realtime do response = HTTParty.post('https://httpbin.org/post', body: { foo: 'bar' }) puts response.body end puts "Request took #{time} seconds"
Այս կոդը գործարկելուց հետո ես ստանում եմ Request took 0.435745 seconds
տերմինալում: Այսպիսով, սա նշանակում է, որ գրադարանին պահանջվել է մոտ 0.436
վայրկյան՝ հարցումն ավարտելու համար:
Գրադարանի փաստաթղթերը շատ լավ են գրված և յուրաքանչյուր քայլ բացատրում են օրինակով: Բացի դրանից, դուք կարող եք գտնել հիանալի ձեռնարկներ այլ կայքերից httparty
-ում: Սա ցույց է տալիս, որ գրադարանն ունի համայնքի մեծ աջակցություն:
HTTParty
-ը կարող է ավտոմատ կերպով վերլուծել պատասխանի մարմինները տարբեր ձևաչափերով, ներառյալ JSON
, XML
և YAML
, և դրանք վերադարձնել որպես Ruby օբյեկտներ կամ հեշեր: Բացի այդ, այն կարող է կարգավորել սխալ հաղորդագրությունները՝ վերադարձնելով համապատասխան հաղորդագրությունները:
Ընդհանուր առմամբ, ցանկացած ծրագրավորող կարող է հարմարավետ կերպով սկսել իր ճանապարհորդությունը այս գոհարով:
Ֆարադեյ
Սա մեկ այլ HTTP հաճախորդ է, որն ապահովում է պարզ API-ներ ցանկացած վեբ սերվերի հետ HTTP կապեր ստեղծելու համար: Այն կարող է կարգավորել միացման ժամանակի ավարտը, սխալները և կարող է նույնիսկ կրկին փորձել հարցումը, եթե առաջին կապը չկարողանա անցնել։ հաջողությամբ։ Կրկնելու գործառույթը շատ օգտակար է, երբ խոսքը վերաբերում է վեբ քերծմանը: Դուք կարող եք շարունակել փորձել, մինչև հարցման կարգավիճակը լինի 200
:
Այն նաև տրամադրում է Typhoeus
, Excon
և Net::HTTP
ադապտերներ, այն ծրագրավորողների համար բացում է տարբերակներ՝ ընտրելու ադապտեր՝ ըստ իրենց պահանջների:
Այժմ եկեք չափորոշենք այս գրադարանը՝ կատարելով GET և POST հարցումներ:
require 'faraday' require 'benchmark' time = Benchmark.realtime do connection = Faraday.new('https://httpbin.org') response = connection.get('/get') puts response.body end puts "Request took #{time} seconds"
Այս կոդը գործարկելուց հետո ես ստանում եմ Request took 0.054039 seconds
տերմինալում: Դա նշանակում է, որ այս գրադարանին պահանջվեց 0.054
վայրկյան առաջադրանքն ավարտելու համար: Եկեք հիմա POST հարցում կատարենք:
require 'faraday' require 'benchmark' time = Benchmark.realtime do connection = Faraday.new('https://httpbin.org') response = connection.post('/post', {foo: 'bar'}) puts response.body end puts "Request took #{time} seconds"
POST հարցումը faraday-ով տևեց մոտ 0,081 վայրկյան: Դե, արագությունը պարզապես ֆանտաստիկ է:
Բացի արագությունից, ֆարադայի փաստաթղթերը շատ լավ են գրված։ Այն բացատրում է իր առաջարկած յուրաքանչյուր մեթոդ օրինակով: Faraday-ը նաև օգտագործում է միջին ծրագրային ճարտարապետություն, որը թույլ է տալիս փոփոխել հարցումներն ու պատասխանները ճկուն և բաղադրելի ձևով: Դուք կարող եք ավելացնել կամ հեռացնել միջին ծրագիր՝ ձեր հարցումների վարքագիծը հարմարեցնելու համար:
Ցանկացած վեբ կայք սանդղակով քերելով, դուք պետք է փոփոխեք վերնագրերը այդ faraday-ի յուրաքանչյուր նոր հարցման համար, ապահովում է ձեր հարցումների համար հատուկ վերնագրեր և ընտրանքներ սահմանելու պարզ միջոց, ինչպիսիք են նույնականացման հավատարմագրերը, ժամանակի ընդհատումները և SSL կարգավորումները:
Երբ որոնեք faraday
google-ում, դուք կգտնեք բազմաթիվ ձեռնարկներ: Սա նշանակում է, որ համայնքի աջակցությունը նույնպես մեծ է այս գրադարանի համար:
Ընդհանուր առմամբ, Faraday-ը հզոր և ճկուն գրադարան է, որը կարող է պարզեցնել HTTP հարցումների և պատասխանների մշակման գործընթացը ձեր Ruby հավելվածներում:
RestClient
Դա մեկ այլ հայտնի HTTP հաճախորդների գրադարան է: Այս գրադարանով նույնպես կարող եք GET, POST, DELETE և այլն հարցումներ կատարել ցանկացած http կամ https API վերջնակետի համար:
RestClient-ը նաև թույլ է տալիս սահմանել ձեր հարցումների ժամանակի վերջնաժամկետ՝ ապահովելով, որ ձեր հայտը չկախվի կամ չպատասխանի, եթե հարցումը շատ երկար տևի:
Տեսնենք, թե ինչպես է այս գրադարանը գործում GET և POST հարցումներով:
require 'rest-client' require 'benchmark' time = Benchmark.realtime do response = RestClient.get 'https://httpbin.org/get' puts "Response code: #{response.code}" end puts "Request took #{time} seconds"
Այս կոդը գործարկելուց հետո ես ստանում եմ 0.173
վայրկյան: Այժմ տեսնենք, թե ինչպես է այս գրադարանը գործում POST հարցումով:
require 'rest-client' require 'benchmark' time = Benchmark.realtime do response = RestClient.post 'https://httpbin.org/post', { :param1 => 'value1', :param2 => 'value2' } puts "Response code: #{response.code}" end puts "Request took #{time} seconds"
POST հարցումը կատարելու համար պահանջվեց մոտ 0.1898
վայրկյան:
Ինչպես Faraday-ը, RestClient-ը նաև թույլ է տալիս ծրագրավորողներին սահմանել հատուկ վերնագրեր և պարամետրեր HTTP հարցումների համար, ինչը այն դարձնում է ճկուն և կարգավորելի օգտագործման տարբեր դեպքերի համար:
RestClient-ում ես չեմ գտել որևէ հիմնական ձեռնարկ, և փաստաթղթավորումը այնքան էլ լավ գրված չէ:
Տիֆեոս
Typhoeus-ը Ruby գոհար է, որը կարող է հեշտությամբ կատարել զուգահեռ HTTP հարցումներ: Քանի որ այն կառուցված է libcurl
գրադարանի վերևում, կարող եք կատարել ասինխրոն զանգեր: Դա նշանակում է, որ դուք կարող եք մի քանի API զանգեր կատարել և հետո կարգավորել պատասխանը, երբ նրանք հասնում են:
Եկեք ստուգենք դրա կատարումը GET հարցումով:
require 'typhoeus' require 'benchmark' time = Benchmark.realtime do response = Typhoeus.get('https://httpbin.org/get') puts "Response code: #{response.code}" puts "Response body: #{response.body}" end puts "Request took #{time} seconds"
Այսպիսով, պահանջն իրականացնելու համար պահանջվեց մոտ 0.1282
վայրկյան: Եկեք ստուգենք, թե ինչպես է այն գործում POST հարցումով:
require 'typhoeus' require 'benchmark' response_time = Benchmark.realtime do response = Typhoeus.post('https://httpbin.org/post', body: {foo: 'bar'}) puts "Response code: #{response.code}" puts "Response body: #{response.body}" end puts "Response time: #{(response_time * 1000).round(2)} ms"
POST հարցումը տևեց մոտ 0.1153
վայրկյան:
Դուք կգտնեք այս գրադարանի փաստաթղթերը բավականին օգտակար: Այն բացատրում է ամեն ինչ ճիշտ՝ տեղադրումից մինչև առաջադեմ մեթոդներ օրինակով: Դուք նույնիսկ կարող եք դրա հետ սահմանել հարցումի առավելագույն միաժամանակությունը: Ի դեպ, զուգահեռության ներկառուցված սահմանաչափը 200 է։
Եթե դուք փնտրում եք բարձր արդյունավետությամբ HTTP հաճախորդ, ապա Typoeus-ը կարող է լինել ընտրանքներից մեկը: Ընդհանուր առմամբ, դա հիանալի գրադարան է:
Excon
Դա մաքուր Ruby HTTP հաճախորդների գրադարան է, որը կառուցված է Ruby ստանդարտ Net::HTTP
գրադարանի վերևում: Այն կարող է ապահովել SSL/TLS կոդավորումներ և հոսքային պատասխաններ, և դուք կարող եք կատարել ասինխրոն զուգահեռ հարցումներ: Շատ հայտնի Ruby շրջանակներ, ինչպիսիք են Fog-ը և Chef-ը, նույնպես օգտագործում են այս գրադարանը:
Եկեք ստուգենք այս գրադարանի աշխատանքը պարզ GET հարցումով:
require 'excon' require 'benchmark' url = 'https://httpbin.org/get' time = Benchmark.realtime do Excon.get(url) end puts "Time taken: #{time.round(2)} seconds"
Այսպիսով, GET հարցումը կատարելու համար պահանջվեց մոտ 0.23
վայրկյան: Եկեք փորձարկում կատարենք POST հարցումով:
require 'excon' require 'benchmark' url = 'https://httpbin.org/post' payload = {key1: 'value1', key2: 'value2'} time = Benchmark.realtime do Excon.post(url, body: payload.to_json, headers: {'Content-Type' => 'application/json'}) end puts "Time taken: #{time.round(2)} seconds"
POST հարցումը տևեց մոտ 0.28
վայրկյան:
Փաստաթղթերը բավականին մանրամասն են, ինչը հիանալի նորություն է սկսնակների համար: Excon-ն ապահովված է մեծ համայնքի կողմից, որը թարմացնում է այս գրադարանը: Կանոնավոր նոր թարմացումներ են թողարկվում՝ սխալները նվազագույնի հասցնելու համար:
Մյուս կողմից, Excon-ը չի գալիս ներկառուցված միջին ծրագրով սովորական առաջադրանքների համար, ինչպիսիք են JSON վերլուծությունը կամ գրանցումը: Թեև սա թույլ է տալիս ավելի մեծ ճկունություն, այն կարող է պահանջել ավելի շատ տեղադրման ժամանակ: Excon-ն ունի մի քանի առաջադեմ առանձնահատկություններ, որոնք ուսուցման կորը մի փոքր ավելի կտրուկ են դարձնում:
Արդյունքներ!!
Եկեք համեմատենք բոլոր վիճակագրությունը և տեսնենք, թե ով է ակնհայտ հաղթողը:
Ինչպես տեսնում եք, Faraday
արագության առումով ակնհայտ հաղթող է: Բայց այն սերտ մրցակցության մեջ է HttParty-ի հետ՝ իրենց GitHub պահեստում նշված աստղերի առումով: Բայց ընդհանուր առմամբ Faraday-ը հաղթող է իր արագության և համայնքի մեծ աջակցության շնորհիվ:
Արագության առումով HTTParty
-ը շատ դանդաղ է՝ համեմատած այլ գրադարանների հետ։ Բայց քանի որ այն ունի համայնքի մեծ աջակցություն, դուք կարող եք դիտարկել այս գրադարանը փոքր նախագծերի համար: Ինտերնետում դուք կգտնեք հիանալի ձեռնարկներ այս գրադարանի վերաբերյալ:
Եզրակացություն
Այս հոդվածում մենք ուսումնասիրեցինք լավագույն հինգ հանրաճանաչ գրադարանները՝ իրենց կատարման արագությամբ և համայնքի աջակցությամբ: Իսկ Ֆարադեյը բացահայտ հաղթող դուրս եկավ։ Բայց դա չի նշանակում, որ այլ գրադարաններն ի վիճակի չեն ստեղծել հավելվածներ և քերիչներ: Բայց ցանկացած վեբ քերիչ կառուցելիս խորհուրդ է տրվում օգտագործել Faraday-ը, քանի որ այս գրադարանը կարող է արագացնել վեբ քերծումը: Faraday-ը 87%-ով ավելի արագ է, քան HTTParty-ն, ինչը պարզապես ահռելի է: Այս գրադարանում կանոնավոր թարմացումներ են արվում՝ այս գրադարանն էլ ավելի հզոր դարձնելու համար:
Դուք, իհարկե, կարող եք փորձարկել դրանք բոլորը ձեր վերջում վերևում ներկայացված կոդի հատվածներով: Արագությունը կախված կլինի ցանցից, բայց ընդհանուր առմամբ Faraday-ը կհայտնվի որպես ակնհայտ հաղթող:
Հուսով եմ, որ ձեզ դուր կգա այս փոքրիկ ձեռնարկը, և եթե հավանեցիք, ապա մի մոռացեք այն կիսել ձեր ընկերների և ձեր սոցիալական ցանցերում:
Լրացուցիչ ռեսուրսներ
Ահա մի քանի լրացուցիչ ռեսուրսներ, որոնք կարող եք օգտակար գտնել ձեր վեբ քերծման ճանապարհորդության ընթացքում.