API abbreviaturasi "Application Programming Interface" so'zlarining bosh harflaridan olingan bo'lib, dasturlarni dasturlash interfeysi yoki dastularni dasturiy interfeysi deb tarjima qilinadi. Ko'plab kompaniyalar API'ni tayyor mahsulot sifatida taqdim etishadi. Masalan, Weather Underground metereologik ma'lumotlar olish uchun API sotadi. API so'rovga misol tariqasida quyidagi havolani ko'rib chiqamiz:
http.get("https://e-auksion.uz/api/front/lots")
{
"totalPages": 193,
"totalRows": 1927,
"currentPage": 1,
"gaming_lots_cnt": 0,
"rows": [
{
"id": 2070118,
"lot_number": "2070118",
"name": "Қурилиши тугалланмаган мактаб биноси",
"full_address": "Ташкентская область, Янгиюльский район, Шўралисой КФЙ, Хўжаобод МФЙ",
"confiscant_categories_name": "Здания с незавершенным строительством",
"category_id": 4,
"start_price": 1.80503E9,
"zaklad_summa": 9.02515E7,
"auction_date_str": "20.06.2022 10:00",
"order_end_time_str": "20.06.2022 09:00",
"zaklad_percent": 5.0,
}]
}
API ni qo'shishda quyidagi maydonlar to'ldirilishi kerak:
v1/yatt/bank
, lekin bu ixtiyoriy ravishda yoziladi.GET
,POST
,PUT
,PATCH
,DELETE
kabilardir).Bearer Token
(API ga so'rov berayotgan user ma'lumotlari aniqlanadi) hamda Basic Auth
(JWT token asosida yaratiladi).active
, hidden
, archived
kabi parametrlarni qamrab oladi.
API ni loyihalarga qo'shishda method qo'llanilishi bir nechta turga ajratiladi. Bular:
GET
- ma'lumotlarni qabul qilish uchun mo'ljallangan API larni kiritish nazarda tutiladi.POST
- loyihada qo'llanilgan ma'lum forma, menyu, sahifa va h.k larda e'lon qilish uchun mo'ljallangan API lar nazarda tutiladi.PUT
- ma'lum bir funksiya yoki protsedura ichida ko'rinishi ko'zda tutilgan kodlarni kiritish uchun mo'ljallangan API larni ishlatish.PATCH
- e'lon qilinmasdan kiritilishi ko'zda tutilgan va shu bilan birga yangilash harakati ko'zda tutilgan API lar uchun qo'l keladi.DELETE
- Qo'llanilgan funksiyalar ichidagi protsesslarda o'chirilishi nazarda tutilgan amallar uchun foydalanish nazarda tutilgan.
Autentifikatsiya parametrini sozlash maqsadida auth_handler da variant tanlanadi. Bular:
Bearer Token
- foydalanuvchiga biriktirilgan token orqali autentifikatsiya qilish.Basic Auth
- standart bo'yicha biriktirilgan tokenga asosan autentifikatsiya.
Loyihalarga qo'shilgan va biriktirilgan API larning holatini nazorat qilish uchun state maydonining ahamiyati muhim. Chunki uning belgilanganligiga asosan qo'shilgan API ko'rinishi, ko'rinmasligi yoki arxivlanishi mumkin. Uning elementlari quyidagilar:
active
- ushbu holatda API va uning tashkil etuvchilari funksional jihatdan, qayerda ishlatilgan bo'lsa, to'liq amalga oshiriladi.hidden
- agar API ishlashi jihatidan kerak bo'lmasa, uni ushbu holat orqalik o'chirib qo'ysa bo'ladi.archived
- ma'lum bir API ni arxivlash uchun qo'llaniladi.
Ma'lum bir API ga kimlarga ruhsat berishni hal etish uchun access_condition maydoni ishlatiladi.
Agar kiritilgan API ga qisqa tushuntirishlar zarur bo'lsa, u holda note maydoniga kerakli bo'lgan asosiy yoki qo'shimcha ma'luotlar qo'lda kiritiladi.
API da ko'zda tutilgan bir nechta parametrlarni tekshirish va xato yuzaga kelsa o'z o'rniga qaytarib qo'yish mumkin. Buning uchun has_transaction tugmasi bosiladi. Bu asosan bir dona xatolik yuzaga kelsa ham, ma'lumotlarni saqlash uchun as qotadi.
API da qaytishi kerak bo'lgan ma'lumotlarni necha soniyada keshlanishini ko'rsatib o'tish uchun, result_cached_seconds maydonida soniyalar kiritiladi.
Agar mazkur API ni guruhlash kerak bo'lsa, group_by maydonida umumiy gyryh nomi kiritib o'tiladi.
API larni qanday yaratishni ko'rib chiqdik! Endi ularning tashkil etuvchilari, ya'ni stage larni ko'rib chiqamiz.
archived
- faylni to'laligicha arxivga solish uchunhidden
- foydalanmaslik uchun holatini noaktiv qilish uchunactive
- ishlatish uchun soz holatda ekanligini bildirish uchun
HTTP Request Handler - bu tur tashqi API ga murojaat qilish uchun ishlatiladi.
Bunda:
GET
, POST
, PUT
, PATCH
, DELETE
).application/json
, text/plain
, text/html
, multipart/form-data
, application/x-www-form-urlencoded
, application/pdf
, application/octet-stream
).Key
va Value
ma'lumotlarini kiritish talab etiladi.
SQL Bulk insert - bu turda koplab ma'lumotlarni ya'ni ma'lumotlar listini saqlash imkoniyati mavjud.
Bunda:
#list
kabi.
SQL insert - bu tur bitta objectni insert qilish uchun ishlatiladi.
Bunda:
SQL select - bu tur malumotlarni o'qib olish uchun ishlatiladi.
Bunda:
Static_json - bu tur asosan ikkita va undan ortiq stagedagi malumotlarni birlashtirish uchun ishlatiladi.
Bunda:
handler_group - ikki va undan ortiq stagega parent qilib olish va aynan shu stagega shart berish orqali qolganlarini boshqarish mumkin.
joinChildObject -
API dagi Objectlar ichida object qurish
JSEval - bu tur stagening javascript va java orqali yaratilishi uchun ishlatiladi.
requestDataConvertor
stageDataConvertor
Stagelardagi ma'lumotlarni boshqa turga convert qilish uchun
Validation - bu tur tizimda qo'llanilishi mumkin bo'lgan validatsiyalar uchun ishlatiladi. Bunda apiga kerakli bo'lgan maydonni tizim ko'rsatmasa (bermasa), berishini sorab 500 xato qaytaradi.
Bunda:
Platon apida stagelar orqali bita api da ko'plab stagelar yozishimiz mumkin, Handlerlar ketma ketligi orqali , yuroridagi stage ma'lumotlari esa
:
orqali ushlanadi , parametrdagi ma'lumotlar esa#
beligi orqali ushlanadi.
"API" ro'yxatga olinganidan so'ng uning bosqichlari 'stages' kiritilishi kerak. Stage'lar bu APIga keluvchi so'rovlarning turlaridir. APIga keluvchi so'rovlar GET
POST
PUT
PATCH
DELETE
ko'rinishiga ega bo'lishi mumkin.
SQL Select
- bazadan ma'lumotlarni chaqirish uchun ishlatiladi
SQL Insert
- bazaga ma'lumotni kiritish uchun ishlatiladi
SQL Update
- bazadagi ma'lumotlarni o'zgartirish uchun ishlatiladi
SQL Bulk Insert
- bazadagi bir nechta ma'lumotlarni bir vaqtni o'zida kiritish uchun ishlatiladi
SQL Batch Update
- bazadagi bir nechta ma'lumotlarni bir vaqtni o'zida o'zgartirish uchun ishlatiladi
Handler group
- Stagelardagi ma'lumotlarni gruxlash
Static JSON
- Static ma'lumotlarni json shaklida yozish uchun
HTTP Request Handler
- API ichida boshqa API larga murojat qilish uchun
Joined Child Object
- API dagi Objectlar ichida object qurish
Validation
- Validatsiya qo'yish
Stage Data Converter
- Stagelardagi ma'lumotlarni boshqa turga convert qilish uchun
Request Data Converter
- ????
JS Eval
- API lar ichida JavaScript kodlar yozish uchun.
Quydagi misollar test platonda cars jadvali ustida olib boriladigan ishlar uchun query na'munalar.
select id,
car_name,
car_brand
from cars
where state = 1
Ushbu misolda cars jadvalidagi state = 1 bo'lgan barcha avtomobillar (list ko'rinishida) qaytadi.
Agarda parametr orqali qandaydir ma'lumot orqali querydagi ma'lumotlar saralansa ularni query ichida #
belgisi orqali ushlaymiz.
select id ,
car_name ,
car_brand
from cars
where state = 1 and car_brand = #car_brand
insert into cars
( id ,
car_name ,
car_brand)
values
(1::integer ,
#car_name::varchar ,
#car_brand::varchar)
update cars
set car_name = #car_name::varchar
where id = #id::integer
cars = [
{ id: 1, car_name: 'Model S', car_brand: 'Tesla' },
{ id: 2, car_name: 'Civic', car_brand: 'Honda' },
{ id: 3, car_name: 'Mustang', car_brand: 'Ford' },
{ id: 4, car_name: 'Corolla', car_brand: 'Toyota' },
{ id: 5, car_name: 'A4', car_brand: 'Audi' }
];
Agarda biz yuqoridagi cars ga o'xshash list ni yuborish uchun aynan Bulk Insert ishlatamiz. Namuna:
Bu yerda batch_data_source ga kelayotgan array li #
belgisi orqali ushlab olamiz.
Queryda esa quydagicha yoziladi:
insert into cars
( id , car_name , car_brand)
values
(@id ,
@car_name ,
@car_brand)
array ichidagi ma'lumotlarni @
belgisi orqali ushlaymiz.
update cars
set car_name = @car_name::varchar
where id = @id::integer
va bizda qaysidur APIlarni gruxlash kerak bo'lsa Handler groupdan foydalanamiz.
{
"id":1,
"name":"test"
}
Va natija PostMan orqali olinganda quydagi natijani olishimiz mumkin.
HTTP Request Handler
Bu orqali tashqi va boshqa API larga murojat amalga ochiriladi murojat qilinadi.
URL: Murojat qilinishi kerek bo'lgan API urli.
Headersga yuborilayotgan APIning headersda bermoqchi bo'lgan narsalar yoziladi.
Joined Child Object
Ushbu handler orqali biz API lardan qaytayotkan Objectlar ichida child objectlar qurishimiz mumkin
Masalan bizda API dan quydagi ko'rinishda ma'lumot keladi:
[
{
"id": "1",
"status": 1,
"car_type": 1,
"car_name": "BMW X5",
"car_brand": "BMW"
},
{
"id": "2",
"status": 1,
"car_type": 1,
"car_name": "NEXIA 3",
"car_brand": "GM-Uzbekistan"
}
]
Va ushbu holatdagi so'rov esa yuqorida ko'rsatilganidek odiy seletc yozilgan:
SQL query esa quydagicha :
select id ,
status,
car_type ,
car_name ,
car_brand
from cars
where state = 1
Endi bizga agarda ma'lumotlar boshqa ko'rinishida kerak bo'lsa yani ichma-ich objectlar orqali kerak bo'lsa u holda Joined Child Object oraqli qilamiz , yani:
[
{
"id": "1",
"status": 1,
"car": {
"name": "BMW X5",
"type": 1,
"brand": "BMW"
}
},
{
"id": "2",
"status": 1,
"car": {
"name": "NEXIA 3",
"type": 2,
"brand": "GM-Uzbekistan"
}
}
]
Ko'rinishida kerak bo'lsa
Alias
Bu yerda object ichidagi child object nomi
Parent
Qaysi stagedan ma'lumotlar olishi
Join_prefix
Nima bo'yicha saralab ajratib olishi
Validation
Validattion orqali kelayotgan ma'lumotlarni tekshirishimiz va xato qaytarishimiz mumkin.
condition orqali shartlarni tekshiriladi
error_message1 orqali xato qaytganda yubiluvchi tekst larni yozamiz
Stage Data Converter
Ushbu stage orqali biz boshqa stage ma'lumotlarni convert qilishimiz mumkin.
Converter ushbu maydonda ma'lumotlarni qaysi turdan qaysi turga conver qilishni tanlanadi.
Parent ushbu maydon qaysi stagedan ma'lumotlarni olish kerakligi yani ota stage
Property_name ushbu maydonda qaysi ma'lumotlarni qayta ishlash kerakligini belgilaymiz.
Request Data Converter
JS Eval
JS eval orqali API lar ichida JavaScript kodlar yoziladi.
APIda mavjud bosqichlarning ro'yhati APIning havolasiga bosilganda chiqadi
APIga yangi bosqich qo'shish uchun Qo'shish tugmasini bosing va kerakli ma'lumotlarni to'ldiring:
Barcha ma'lumotlarni kiritgach saqlash - 4 tugmasini bosing
E'tibor qarating har bir bosqich turi uchun (Stage handler) o'zgacha qo'shimcha ma'lumotlar qismi mavjud
Oxirgi yangilanishda o‘zingizning kodingizni ishlab chiqish, qo‘llab-quvvatlash va sinab ko‘rishga yordam beradigan yangi redaktor qo‘shdik. Redaktor VS Code da faol foydalaniladigan, Microsoft ning progressiv redaktoridagi MonacoEditor bazasida ishlaydi va ushbu redaktorda qo‘llab-quvvatlanadigan barcha funksionallar va instrumentlardan foydalanish imkonini beradi. Shuningdek, yangi ishlab chiqish muhitiga ES6/7/8(https://www.codinqame.com/playqrounds/3629/5-features- of-es-6-7-8-that-supercharge-your-javascript) versiyalari sintaksisini qo‘llab-quvvatlash, kodni testdan o‘tkazish va sozlash uchun qulay konsol qo‘shilgan.
Shaklning tayanch (bazoviy) elementi ikki qismga bo‘lingan:
Redaktorning interfeysining o‘zi 3 ta panelga bo‘lingan ish maydonidan iborat. Yuqori chap panelda (1) kod redaktori joylashgan, uning o‘ng tomonida test uchun redaktor (4) va oynaning pastki qismidagi konsol (7) joylashgan.
Platon komandasi tomonidan kodlarni unit-test bilan yopish uchun interfeys ishlab chiqildi. Ushbu testlar sizning dasturingiz qanday o‘ylangan bo‘lsa, shu tarzda ishlashiga ishonch hosil qilishga xizmat qiladi. Bunday testlarni ko‘p martalab ishga tushirish mumkin. Testning muvaffaqiyatli bajarilishi, testni ishlab chiquvchiga, testga kiritilgan o‘zgarishlar ko‘zda tutilmagan hech qanday buzilishlarga olib kelmaganini ko‘rsatadi. Ushbu yo‘riqnoma unit-testlar nima uchun kerak, qachon va qanday yozilishini ko‘rsatishga mo‘ljallanmagan. Bunday ma’lumotlarni internetdan mustaqil ravishda topishingiz mumkin (https://www.google.com/search?q=unit+tests). Biz, faqatgina, unit-testlashtirishning Platon platformasi doirasidagi imkoniyatlarini ko‘rib chiqamiz.
Faraz qilamiz, biz foydalanuvchini uning identifikatori bo‘yicha qaytaruvchi API ga egamiz:
let {user_id} = requestParams,
user = jdbc.query (' SELECT * FROM auth_users WHERE id=${user_id}', {}) return user
Keling, kirish identifikatorini javob identifikatori bilan tekshiradigan test yozaylik. Buning uchun biz expect interfeysidan foydalanamiz.
expect(testName, params, executor)
testName - // Testning nomini ko‘rsatuvchi JavaScript qatori
params - // Testdan o‘tkaziluvchi kodga kirish parametrlari sifatida uzatiluvchi, variables, requestHeaders, requestParams, userParams, extraParams va user kalitlariga ega obyekt
executor - // Funksiya-qayta ishlovchi, data parametrni testlashtirilayotgan kodning bajarilishi natijalari bilan qabul qiladi va test muvaffaqiyatli o‘tganda true yoki muvaffaqiyatsiz bo‘lganda false ni qaytarishi kerak.
// Keling, kirish identifikatorini javob identifikatori bilan tekshiradigan testni tasvirlaylik:
expect
// Test nomi
'Request id equals result id',
// Kirish parametrlari
{
// Identifikatorni bajaruvchi kodga uzatamiz
requestParams: {id: 1}
},
// Tekshirish
result => {
// Biz javobning parametrlarda uzatilgan qiymatlarga mos kelayotganligini tekshiramiz
return result, id === 1
}
)
Run tugmasini bosish orqali yoki [Alt+Enter] tugmalari kombinatsiyalari yordamida testni ishga tushiramiz. Testning bajarilishi natijalari konsolda ko‘rinadi.
Shuni ham yodda tutingki, siz kodingiz uchun cheksiz miqdordagi testlarni yozishingiz mumkin, ammo zarurat bo‘lmaganda testlarni ishlatmang, chunki barcha testlar server resurslaridan foydalanadi va bajariladi.
expect('Test 1', {}, () => true)
expect('Test 2', {}, () => false)
JSON
JS Evalda mavjud eng muhim imkoniyatlardan biri bu API so'rovdan kelgan manbaalarni ustida JSON metodlari orqali ishlashdir. Misol uchun API so'rovdan kelgan "string" ma'lumotlarni JavaScript obyektiga o'tkazish, yoki API so'rovdan kelgan "obyekt" ma'lumotlarni "string" ko'rinishiga o'girish vazifalari bajariladi.
parse()
: Bu serverdan parametr sifatida JSON ma'lumotini oladi va JavaScript obyektini qaytaradi.
// misol uchun
const txt = '{"name":"John", "age":30, "city":"New York"}'
const obj = JSON.parse(txt);
// va biz "obj" o'zgaruvchanini ushbu ko'rinishda olamiz:
// obj = {
// age: 30,
// city: "New York",
// name: "John"
// }
stringify()
: Bu parametr sifatida "obyektni" oladi va ekvivalent JSON stringini serverga jo'natish uchun tayyor holda qaytaradi.
// misol uchun
const obj = {
age: 35,
city: "New Orlean",
name: "Samwell"
}
const str = JSON.stringify(obj);
// va biz "str" o'zgaruvchini JSON shaklida serverga jo'natish uchun ushbu ko'rinishda olamiz:
// {"name":"John","age":30,"city":"New York"}
CONSOLE
JS Evalda biz consolening eng asosiy va eng ko'p ishlatiladigan metodlarini biriktirganmiz. Kod ishlashini kuzatish, natijalarni ko'rish va error xatoliklarni aniqlash uchun JS Eval consolidan foydalanilsa bo'ladi.
Rasmda ko'rsatilganidek, console JS Eval editorining pastgi qismida joylashgan va 2 ta tugmadan iborat:
Keling mavjud console metodlar bilan birin ketin tanishib chiqamiz:
console.log()
- xabarni oladi va natijani consolga chiqaradi. Shuningdek, u JavaScript obyektlarini, massivlarni - JavaScript-dagi barcha ma'lumotlar turlarini chiqarishi mumkin. Bundan tashqari, u chiqazilayotgan xabarlar ko'rinishini tushunarli tarzga keltirib beradi.
console.log("Hello World"); // String
console.log({ name: "Sam Simon", age: 43, }); // Object
console.log(["Apple", "Banana", "Orange"]); // Array
console.error()
- console.log() buyrug'i barcha ma'lumotlarni chiqazuvchi buyruq bo'lishini ko'rib chiqdik, shundan kelib chiqib aytish mumkinki console.error() ham console.log() buyrug'iga juda o'xshash bo'lib xatoliklarni o'zinigina chiqazib beradi.
console.error("Something is wrong");
console.error("Xatolikni o'zingiz hohlaganday xabar bilan chiqarish");
console.warn()
- ushbu console buyrug'i ham huddi console.log() buyrug'iga o'xshash bo'lib eslatma va tafsiyalarni chiqarish uchun ko'pincha ishlatilinadi. Shuningdek, warn() buyrug'i xatosiz ammo noto'g'ri yozilgan kodlarni belgilash uchun ham ishlatiladi.
console.warn("Some warning");
console.warn("Ushbu bo'limda o'zingiz hohlagan eslatma habarlarni chiqarishingiz mumkin");
http
APIga murojaatlarning quyidagi turlari mavjud. Unga murojaat quyidagicha amalga oshiriladi:
http.get(...)
http.post(...)
http.put(...)
http.patch(...)
http.delete(...)
url: String
- So'rov jo'natilayotgan APIning havolasi (link)
dataObj: Object
- Jo'natilayotgan so'rovning 'Tana' (Body) qismi
headerObj: Object
- Jo'natilayotgan so'rovning 'Bosh' (Headerlar) qismi
errorCallback: String
- Xatolik yuz kelgan holatdagi callback funksiyasi
GET
so'rovlari uchun// misol uchun
let data = http.get('https://example.com/test')
console.log('data', data)
// misol uchun
let data = http.get('https://example.com/test', {'Authorization': 'Basic dGVzdDp0ZXN0'})
console.log('data',data)
// misol uchun
let data = http.get('https://example.com/test', {"hello":"world"}, {'Athorization':'Basic dGVzdDp0ZXN0'})
console.log('data',data)
// misol uchun
let data = http.get('https://example.com/test', {'Authorization': 'Basic dGVzdDp0ZXN0'}, function(e,s){
throws.responseException('FORBIDDEN', 'Some text');
}
console.log('data',data)
POST
so'rovlari uchun// misol uchun
let data = http.post('https://example.com/test')
console.log('data',data)
// misol uchun
let data = http.post('https://example.com/test', {"hello":"world"})
console.log('data',data)
// misol uchun
let data = http.post('https://example.com/test', {"hello":"world"}, {'Athorization':'Basic dGVzdDp0ZXN0'})
console.log('data',data)
// misol uchun
let data = post ('https://example.com/test', {"hello":"world"}, {'Athorization':'Basic some-token'},
function(status, error){
console.log(status, JSON.stringify(error))
})
console.log('data',data)
PUT
so'rovlari uchun// misol uchun
let data = http.put('https://example.com/test')
console.log('data',data)
// misol uchun
let data = http.put('https://example.com/test', {"hello":"world"})
console.log('data',data)
// misol uchun
let data = http.put('https://example.com/test', {"hello":"world"}, {'Athorization':'Basic some-token'})
console.log('data',data)
//misol uchun
let data = http.put('https://example.com/test', {"hello":"world"}, {'Athorization':'Basic some-token'},
function(status, error){
console.log(status, JSON.stringify(error))
})
console.log('data',data)
PATCH
so'rovlari uchun// misol uchun
let data = http.patch('https://example.com/test')
console.log('data',data)
// misol uchun
let data = http.patch('https://example.com/test', {"hello":"world"})
console.log('data',data)
// misol uchun
let data = http.patch('https://example.com/test', {"hello":"world"}, {'Athorization':'Basic dGVzdDp0ZXN0'})
console.log('data',data)
// misol uchun
let data = http.patch('https://example.com/test', {"hello":"world"}, {'Athorization':'Basic dGVzdDp0ZXN0'},
function(status, error){
console.log(status, JSON.stringify(error))
})
console.log('data',data)
DELETE
so'rovlari uchun// misol uchun
let data = http.delete('https://example.com/test')
console.log('data',data)
// misol uchun
let data = http.delete('https://example.com/test', {'Authorization': 'Basic dGVzdDp0ZXN0'})
console.log('data',data)
// misol uchun
let data = http.delete('https://example.com/test', {"hello":"world"}, {'Athorization':'dGVzdDp0ZXN0'})
console.log('data',data)
Ruxsat etilmagan amallar xatolikni yuzaga keltirib chiqaradi.
util
JsEvalning 'util' qismida dasturchilar uchun turli xildagi utilitalar va ehtiyoj katta bo'lgan instrumental funksionallari kiritilgan, ulardan biri Base64-decode-encode. Base64 - bu binary-to-text encoding sxemalari guruhi bo'lib, ular ikkilik ma'lumotlarni (Binary malumotlar) ASCII formatida radix-64 ko'rinishiga aylantirish orqali ifodalaydi. Base64 atamasi "a specific MIME content transfer encoding"dan kelib chiqqan.
Platon APIning JsEval bosqichida ham ushbu imkoniyat kiritilgan bo'lib, ma'lumotlarning base64 ko'rinishini olishingiz va aksincha, kontentning base64 yig'inini qayta ma'lumotlarga o'girishingiz mumkin.
"JsEval Utils"dagi mavjud buyruqlar:
util.decodeBase64()
util.encodeBase64()
//misol tariqasida Tomas Gobbsning "Leviafan" asaridan lavhani
//olamiz va natijani consolga chiqaramiz:
let text = `Man is distinguished, not only by his reason, but by this singular passion from
other animals, which is a lust of the mind, that by a perseverance of delight in the continued
and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure`
let text_encoded = util.encodeBase64(text)
console.log(text_encoded)
//misol tariqasida Tomas Gobbsning "Leviafan" asaridan olingan lavhaning
//base64ga matnini olamiz va natijani consolga chiqaramiz:
let base64_text = `TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24
sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpc
yBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB
0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBle
GNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=`
let text_decoded = util.decodeBase64(base64_text)
console.log(text_decoded)
JDBC
Java ma'lumotlar bazasiga ulanish (JDBC) bu Java dasturlariga ma'lumotlar bazasini boshqarish tizimlariga kirish imkonini beruvchi standart amaliy dasturlash interfeysi.
Ushbu standart interfeys va sinflardan foydalanib, dasturchilar ma'lumotlar bazalariga ulanadigan ilovalarni yozishlari mumkin bo'ladi.
"JDBC" dagi mavjud buyruqlar:
jdbc.execute(String sql)
jdbc.execute(String sql, Object args)
jdbc.queryForMap(String sql) = {}
// misol uchun
delete ('https://example.com/test')
// misol uchun
delete ('https://example.com/test')
// misol uchun
delete ('https://example.com/test')
// misol uchun
delete ('https://example.com/test')
// misol uchun
delete ('https://example.com/test')
// misol uchun
delete ('https://example.com/test')
// misol uchun
delete ('https://example.com/test')
REDIS
Redis qisqartmasi masofaviy lug'at serveri degan ma'noni anglatadi. Redis nima uchun ishlatiladi? Redis - bu tizim xotirasida saqlangan ma'lumotlarga xizmat ko'rsatishda ish faoliyatini yaxshilash uchun NoSQL ma'lumotlar bazasi yoki xotira-kesh do'koni sifatida ishlay oladigan rivojlangan kalit-qiymat do'koni.
"Redis" dagi mavjud buyruqlar:
redis.privateKey(): String
// misol uchun
delete ('https://example.com/test')
// misol uchun
delete ('https://example.com/test')
// misol uchun
delete ('https://example.com/test')
// misol uchun
delete ('https://example.com/test')
API ning ushbu bosqich turida tashqi serverda joylashgan manbaadan api so'rov orqali ma'lumot yuklash uchun foydalaniladi. Qo'shimcha CORS xatoligi (Cross-Origin Resource Sharing)ni oldini olish uchun Request handler bosqichidan foydalaniladi. Misol tariqasida tashqi serverdagi manbaga api so'rov yuboramiz
Rasmda:
CONTINUE(100, "Continue"),
// Hamma so'rovlar joyida ekanligi va davom ettirish mumkinligini bildirib turuvchi kod
SWITCHING_PROTOCOLS(101, "Switching Protocols"),
// Ushbu kod Upgrade: sarlavhasini mavjud so'roviga yuboriladi va server sarlavhada ko'rsatilgan protokolga o'tganligini bildiradi.
PROCESSING(102, "Processing"),
// "Ish olib borilmoqda". Ushbu kod server so'rovni qabul qilganligini va uni ustida ishlash hali tugallanmaganligini bildiradi.
CHECKPOINT(103, "Checkpoint"),
//
OK(200, "OK"),
// "Muvaffaqiyatli". So‘rov muvaffaqiyatli bajarildi.
CREATED(201, "Created"),
// "Yaratildi". So‘rov muvaffaqiyatli bajarildi va natijada resurs yaratildi. Ushbu kod odatda PUT so'roviga javob sifatida yuboriladi.
ACCEPTED(202, "Accepted"),
// "Qabul qildi". So'rov qabul qilindi, lekin hali ko'rib chiqilmagan holatda keluvchi kod.
NON_AUTHORITATIVE_INFORMATION(203, "Non-Authoritative Information"),
// "Ma'lumotlar ishonchli emas." Bu kod qaytarilgan ma'lumot asl server tomonidan emas, balki boshqa manbadan olinganligini bildiradi.
NO_CONTENT(204, "No Content"),
// "Kontent mavjud emas." So'rovga javob beradigan kontent yo'q, ammo foydali bo'lishi mumkin bo'lgan javob sarlavhalari yuboriladi.
RESET_CONTENT(205, "Reset Content"),
// "Kontentni qayta yuklash". Ushbu kod so'rov yuborilgan hujjatning ko'rinishini qayta yuklash kerakligini bildirish uchun yuboriladi.
PARTIAL_CONTENT(206, "Partial Content"),
// "Qismlarga bo'lingan tuzilish". Ushbu kod bir nechta qismlarda yuklab olish uchun mo'ljallangan so'rovlarda ishlatiladi.
MULTI_STATUS(207, "Multi-Status"),
// Ushbu kod bir nechta mustaqil jarayonlarning holatini ta'minlaydi
ALREADY_REPORTED(208, "Already Reported"),
//
IM_USED(226, "IM Used"),
//
MULTIPLE_CHOICES(300, "Multiple Choices"),
// "Tanlov ko'pligi". Ushbu kod so'rovda bir nechta javoblar mavjud bo'lganda yuboriladi. Va user-agent yoki foydalanuvchi javoblardan birini tanlashi kerakligini bildiradi.
MOVED_PERMANENTLY(301, "Moved Permanently"),
// "To'liq ko'chirilgan." Ushbu kod so'ralgan manbaning "URI"si o'zgartirilganligini bildiradi.
FOUND(302, "Found"),
// "Topildi". Ushbu kod so'ralgan manba topilgan va unga vaqtinchalik o'zgartirilganligini bildiradi..
MOVED_TEMPORARILY(302, "Moved Temporarily"),
//
SEE_OTHER(303, "See Other"),
// "Boshqa manbalarni ko'rish". Ushbu kod mijozni GET so'rovi bilan boshqa URIdan man'lumotni olishga yo'naltirish uchun yuboriladi.
NOT_MODIFIED(304, "Not Modified"),
//
USE_PROXY(305, "Use Proxy"),
//
TEMPORARY_REDIRECT(307, "Temporary Redirect"),
//
PERMANENT_REDIRECT(308, "Permanent Redirect"),
//
BAD_REQUEST(400, "Bad Request"),
//
UNAUTHORIZED(401, "Unauthorized"),
//
PAYMENT_REQUIRED(402, "Payment Required"),
//
FORBIDDEN(403, "Forbidden"),
//
NOT_FOUND(404, "Not Found"),
//
METHOD_NOT_ALLOWED(405, "Method Not Allowed"),
//
NOT_ACCEPTABLE(406, "Not Acceptable"),
//
PROXY_AUTHENTICATION_REQUIRED(407, "Proxy Authentication Required"),
//
REQUEST_TIMEOUT(408, "Request Timeout"),
//
CONFLICT(409, "Conflict"),
//
GONE(410, "Gone"),
//
LENGTH_REQUIRED(411, "Length Required"),
//
PRECONDITION_FAILED(412, "Precondition Failed"),
//
PAYLOAD_TOO_LARGE(413, "Payload Too Large"),
//
REQUEST_ENTITY_TOO_LARGE(413, "Request Entity Too Large"),
//
URI_TOO_LONG(414, "URI Too Long"),
//
REQUEST_URI_TOO_LONG(414, "Request-URI Too Long"),
//
UNSUPPORTED_MEDIA_TYPE(415, "Unsupported Media Type"),
//
REQUESTED_RANGE_NOT_SATISFIABLE(416, "Requested range not satisfiable"),
//
EXPECTATION_FAILED(417, "Expectation Failed"),
//
I_AM_A_TEAPOT(418, "I'm a teapot"),
//
INSUFFICIENT_SPACE_ON_RESOURCE(419, "Insufficient Space On Resource"),
//
METHOD_FAILURE(420, "Method Failure"),
//
DESTINATION_LOCKED(421, "Destination Locked"),
//
UNPROCESSABLE_ENTITY(422, "Unprocessable Entity"),
//
LOCKED(423, "Locked"),
//
FAILED_DEPENDENCY(424, "Failed Dependency"),
//
TOO_EARLY(425, "Too Early"),
//
UPGRADE_REQUIRED(426, "Upgrade Required"),
//
PRECONDITION_REQUIRED(428, "Precondition Required"),
//
TOO_MANY_REQUESTS(429, "Too Many Requests"),
//
REQUEST_HEADER_FIELDS_TOO_LARGE(431, "Request Header Fields Too Large"),
//
UNAVAILABLE_FOR_LEGAL_REASONS(451, "Unavailable For Legal Reasons"),
//
INTERNAL_SERVER_ERROR(500, "Internal Server Error"),
//
NOT_IMPLEMENTED(501, "Not Implemented"),
//
BAD_GATEWAY(502, "Bad Gateway"),
//
SERVICE_UNAVAILABLE(503, "Service Unavailable"),
//
GATEWAY_TIMEOUT(504, "Gateway Timeout"),
//
HTTP_VERSION_NOT_SUPPORTED(505, "HTTP Version not supported"),
//
VARIANT_ALSO_NEGOTIATES(506, "Variant Also Negotiates"),
//
INSUFFICIENT_STORAGE(507, "Insufficient Storage"),
//
LOOP_DETECTED(508, "Loop Detected"),
//
BANDWIDTH_LIMIT_EXCEEDED(509, "Bandwidth Limit Exceeded"),
//
NOT_EXTENDED(510, "Not Extended"),
//
NETWORK_AUTHENTICATION_REQUIRED(511, "Network Authentication Required");