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-ը կհայտնվի որպես ակնհայտ հաղթող:

Հուսով եմ, որ ձեզ դուր կգա այս փոքրիկ ձեռնարկը, և եթե հավանեցիք, ապա մի մոռացեք այն կիսել ձեր ընկերների և ձեր սոցիալական ցանցերում:

Լրացուցիչ ռեսուրսներ

Ահա մի քանի լրացուցիչ ռեսուրսներ, որոնք կարող եք օգտակար գտնել ձեր վեբ քերծման ճանապարհորդության ընթացքում.