JavaRush /Блоги Java /Random-TG /Баррасии REST. Қисми 2: Муошират байни муштарӣ ва сервер

Баррасии REST. Қисми 2: Муошират байни муштарӣ ва сервер

Дар гурӯҳ нашр шудааст
Қисми 1: REST чист Дар ин бахш мо бодиққат дида мебароем, ки иртибот байни муштарӣ ва server чӣ гуна сурат мегирад. Дар роҳ мо истилоҳоти навро ошкор мекунем ва ба онҳо тавзеҳот медиҳем. Баррасии REST.  Қисми 2: иртибот байни муштарӣ ва server - 1Барои равшан шудани ҳама чиз, мо бо истифода аз мисоли баъзе замимаҳои RESTful муоширати муштарӣ ва serverро таҳлил хоҳем кард. Фарз мекунем, ки мо веб-барномаеро таҳия карда истодаем, ки қодир аст маълумот дар бораи муштариён ва фармоишҳои онҳоро нигоҳ дорад. Онхое. системаи мо қодир аст, ки баъзе an objectҳоро идора кунад: онҳоро эҷод кунад, таҳрир кунад, нест кунад ва дар бораи онҳо маълумот диҳад. Ин субъектҳо хоҳанд буд:
  • мизоҷон - мизоҷон;
  • фармоишҳо - фармоишҳои муштариён;
  • ашё - мол.
Дар меъмории REST, мизоҷон барои ба даст овардан ё тағир додани маълумот ба server дархостҳо мефиристанд ва serverҳо ба мизоҷон ба дархостҳои онҳо посух мефиристанд.

Дархостҳо

Дархостҳои муштарӣ қариб ҳамеша тавассути HTTP анҷом дода мешаванд. Умуман, дархостҳои HTTP аз якчанд ҷузъҳо иборатанд:
  • усули HTTP;
  • унвон;
  • URI;
  • мақомоти дархост.
Дар зер мо ҳар як ҷузъи ҷузъро ба таври муфассал дида мебароем.

URI ва захираҳо

Маълумоте, ки муштариён тавассути дархостҳо ба даст меоранд ё тағир медиҳанд, захираҳо номида мешаванд. Асоси ҳамкории муштарӣ ва server ин коркарди захираҳо мебошад. Манбаъҳо дар REST ҳама чизест, ки онҳоро номгузорӣ кардан мумкин аст. Ба маъное, инҳо ба синфҳо дар Java монанданд. Дар Java мо метавонем синфро барои ҳама чиз эҷод кунем. Дар REST ҳамин тавр аст - манба метавонад ҳама чиз бошад: корбар, ҳуҷҷат, гузориш, фармоиш. Ҳамаи ин метавонад ё абстраксияи ягон an object ё чизи мушаххас бошад, масалан, файл - расм, видео, аниматсия, файли PDF. Барои мисоли мо, мо 3 захира дорем:
  • мизоҷон - мизоҷон;
  • фармоишҳо - фармоишҳои муштариён;
  • ашё - мол.
Мизоҷон дархостҳоро ба нуқтаи ниҳоӣ ё нуқтаҳои ниҳоӣ мефиристанд. Ба таври содда гӯем, нуқтаи ниҳоӣ ба монанди суроға дар шабака аст. Барои амиқтар рафтан, нуқтаи ниҳоӣ як URI аст : пайдарпаии аломатҳо, ки манбаи абстрактӣ ё физикиро муайян мекунанд. Муайянкунандаи ягонаи захираҳо - идентификатори ягонаи захираҳо. Баъзан нуқтаи ниҳоӣ ё URI, роҳ номида мешавад - роҳ ба манбаъ. Барои мақсадҳои ин мақола мо истилоҳи URI-ро истифода хоҳем бурд. Ҳар як манбаи мушаххас бояд URI-и беназир дошта бошад. Масъулият барои таъмини он, ки ҳар як манбаъ ҳамеша URI-и худро дошта бошад, ба дӯши таҳиягари server вогузор аст. Дар мисоли мо, мо таҳиягарон ҳастем, аз ин рӯ мо онро тавре иҷро хоҳем кард, ки чӣ тавр медонем. Тавре ки дар пойгоҳи додаҳои релятсионӣ одатан муқаррар кардани калиди ибтидоӣ ба ID-и рақамии муайян аст, дар REST ҳар як манбаъ ID-и худро дорад. Аксар вақт рӯй медиҳад, ки ID-и захира дар REST ба ID-и сабт дар пойгоҳи додаҳо, ки дар он маълумот дар бораи ин манбаъ нигоҳ дошта мешавад, мувофиқат мекунад. REST URI одатан бо шакли ҷамъи исм оғоз мешаванд, ки баъзе манбаъҳоро тавсиф мекунанд. Масалан, аз калимаи муштариён. Баъдан, идентификатор тавассути хати слэш нишон дода мешавад - идентификатори муштарии мушаххас. Мисолҳо:
  • /муштарӣ - URI ҳамаи муштариёни мавҷуда;
  • /clients/23 - URI муштарии мушаххас, яъне муштарӣ бо ID=23;
  • /clients/4 - URI-и муштарии мушаххас, яъне муштарӣ бо ID=4.
Аммо ин ҳама нест. Мо метавонем URI-ро тавассути илова кардани фармоишҳо ба он тамдид кунем:
  • /клиентҳо/4/фармоишҳо — URI ҳамаи фармоишҳои муштарии № 4;
  • /муштариён/1/фармоиш/12 - URI фармони №12 муштарии №1.
Агар мо ин занҷирро идома дода, молро илова кунем, мо мегирем:
  • /муштарӣ/1/фармоиш/12/маълумот — URI рӯйхати ҳама маҳсулот аз рӯи фармоиши № 12, ки муштарии № 1 таҳия кардааст.
Бо сатҳҳои лона, калид ин аст, ки URI-ҳо беихтиёрона бошанд.

Усули HTTP

Методи HTTP (Usto HTTP English) пайдарпайии ҳама гуна аломатҳо мебошад, ба истиснои идоракунӣ ва ҷудокунандаҳо, ки амалиёти асосиро дар захира нишон медиҳанд. Якчанд усулҳои маъмули HTTP мавҷуданд. Мо онҳоеро номбар мекунем, ки дар хидматҳои RESTful бештар истифода мешаванд:
  • GET - барои гирифтани маълумот дар бораи манбаи мушаххас (тавассути ID) ё маҷмӯи захираҳо истифода мешавад;
  • POST - барои сохтани манбаи нав истифода мешавад;
  • PUT - барои тағир додани захира истифода мешавад (тавассути ID);
  • DELETE - барои нест кардани захира истифода мешавад (тавассути ID).

Сарлавҳаҳо

Дархостҳо ва инчунин ҷавобҳо дорои сарлавҳаҳои HTTP мебошанд. Онҳо маълумоти иловагӣ дар бораи дархост (ё ҷавоб) мефиристанд. Сарлавҳаҳо ҷуфтҳои калид-арзиш мебошанд. Шумо метавонед рӯйхати сарлавҳаҳои маъмултаринро дар саҳифаи Википедиа хонед . Бо REST, муштариён метавонанд аксар вақт сарлавҳаи Accept-ро дар дархости худ ба server фиристанд. Он бояд ба server хабар диҳад, ки муштарӣ дар кадом формат интизор аст, ки аз он посух гирад. Вариантҳои гуногуни формат дар рӯйхати ба ном навъи MIME пешниҳод карда мешаванд. MIME (Multippurpose Mail Internet Extensions) як мушаххасот барои рамзгузории иттилоот ва форматкунии паёмҳо мебошад, то онҳо тавассути Интернет фиристода шаванд. Ҳар як намуди MIME аз ду қисм иборат аст, ки бо аломати хат ҷудо карда шудаанд: намуд ва зернавъи. Намунаҳои намудҳои MIME барои намудҳои гуногуни файлҳо:
  • матн - матн/ҳамвор, матн/css, матн/html;
  • тасвир - тасвир/png, тасвир/jpeg, тасвир/gif;
  • аудио - аудио/wav, аудио/mpeg;
  • видео - video/mp4, video/ogg;
  • барнома - замима/json, замима/pdf, барнома/xml, барнома/octet-stream.
Дар маҷмӯъ, дархост метавонад дорои сарлавҳаи зерин бошад:
Accept:application/json
Ин сарлавҳа ба server мегӯяд, ки муштарӣ интизори гирифтани посух дар формати JSON аст.

Мақомоти дархост

Паёми аз ҷониби муштарӣ ба server фиристодашуда. Новобаста аз он ки дархост дорои маҷмӯа аст ё не, аз намуди дархости HTTP вобаста аст. Масалан, дархостҳои GET ва DELETE одатан ягон мақоми дархостро дар бар намегиранд. Аммо PUT ва POST метавонанд дар бар гиранд: он ҳама дар бораи ҳадафи функсионалии навъи дархост аст. Дар ниҳоят, барои гирифтани маълумот ва нест кардани он аз рӯи ID (ки дар URL интиқол дода мешавад) ба шумо лозим нест, ки маълумоти иловагӣ ба server фиристед. Аммо барои сохтани манбаи нав (дархости POST), шумо бояд ин захираро интиқол диҳед. Ҳамин чиз барои тағир додани захираи мавҷуда дахл дорад. Дар REST, форматҳои XML ё JSON аксар вақт барои интиқоли мақоми дархост истифода мешаванд. Формати маъмултарин JSON мебошад. Фарз мекунем, ки мо мехоҳем ба server дархост ирсол кунем ва дар он манбаи нав эҷод кунем. Агар дар хотир дошта бошед, ба унвони мисол мо барномаеро дида баромадем, ки фармоишҳои муштариёнро идора мекунад. Фарз мекунем, ки мо мехоҳем як муштарии нав эҷод кунем. Дар ҳолати мо, мо маълумоти зеринро дар бораи мизоҷон нигоҳ медорем: Номи почтаи электронӣ Рақами телефон Пас, матни чунин дархост метавонад JSON зерин бошад:
{
  "name" : "Amigo",
  "email" : "amigo@jr.com",
  "phone" : "+7 (191) 746-43-23"
}

Якҷоя кардани дархостҳо

Ҳамин тавр, мо дида баромадем, ки дархости муштарӣ аз чӣ иборат буда метавонад. Биёед ҳоло якчанд мисолҳои пурсишҳоро бо тавсиф медиҳем
Дархост Тавсифи

GET /clients/23
Accept : application/json, application/xml
Дар бораи муштарии № 23 дар формати json ё xml маълумот гиред

POST /clients
{
  "name" : "Amigo",
  "email" : "amigo@jr.com",
  "phone" : "+7 (191) 746-43-23"
}
Бо майдонҳои зерин муштарии нав эҷод кунед:
Ном - Amigo
Email - amigo@jr.com
Тел. — +7 (191) 746-43-23

PUT /clients/1
{
  "name" : "Ben",
  "email" : "bigben@jr.com",
  "phone" : "+380 (190) 346-42-13"
}
Мизоҷи №1-ро ба таври зерин таҳрир кунед:
Ном - Бен
Email - bigben@jr.com
Тел. — +380 (190) 346-42-13

DELETE /clients/12/orders/6
Фармоиши № 6 аз фармоишгари № 12 аз система хориҷ карда шавад

Ҷавобҳо

Биёед дар бораи посухҳои server чанд сухан бигӯем. Ҷавоб одатан аз қисмҳои зерин иборат аст:
  • рамзи ҷавоб;
  • сарлавҳаҳо;
  • мақоми ҷавоб.
Умуман, сарлавҳаҳои посух аз сарлавҳаҳои дархост чандон фарқ намекунанд. Илова бар ин, баъзе сарлавҳаҳо ҳам дар посухҳо ва ҳам дар дархостҳо истифода мешаванд. Ман фикр мекунам, ки ҳама чиз бо бадани вокуниш низ равшан аст. Орган аксар вақт маълумотеро, ки муштарӣ дархост кардааст, бармегардонад. Маълумотро дар ҳамон формати JSON барои дархостҳои GET баргардонидан мумкин аст. Аммо қисми охирин каме ҷолибтар аст.

Рамзҳои ҷавоби HTTP

Биёед ба codeҳои ҷавоби HTTP бодиққат назар кунем. Ин аст иқтибос аз Википедиа: Рамзи ҳолати HTTP қисми хати аввали посухи server барои дархостҳо тавассути протоколи HTTP мебошад. Он адади бутун бо се адади даҳӣ мебошад. Рақами аввал синфи шартро нишон медиҳад. Пас аз рамзи ҷавоб одатан ибораи тавзеҳотӣ дар забони англисӣ бо фосила ҷудо карда мешавад, ки ба шахс сабаби ин посухи мушаххасро мефаҳмонад. Мисолҳо:
  • 201 сохта шудааст;
  • 401 Беиҷозат;
  • 507 Захираи нокифоя.
Мизоҷ аз codeи ҷавоб дар бораи натиҷаҳои дархости худ маълумот мегирад ва муайян мекунад, ки дар оянда чӣ гуна амалҳоро анҷом диҳад. Рамзҳои ҷавоб ба якчанд гурӯҳ тақсим мешаванд:
  • 1ХХ - иттилоотӣ;
  • 2ХХ - дар бораи ҳолатҳои бомуваффақият қабул ва коркарди дархости муштарӣ хабар медиҳад;
  • 3XX - ба муштарӣ хабар диҳед, ки барои бомуваффақият анҷом додани амалиёт дархости дигар, одатан бо истифода аз URI-и дигар зарур аст;
  • 4ХХ - хатои муштарӣ. Масалан, дархости нодуруст сохташуда ё рамзи маъруфи 404 "Наёфтанд", ки метавонад ҳангоми дархости муштарӣ манбаи мавҷуда рух диҳад;
  • 5ХХ - хатои server. Агар амалиёт бо айби server ноком шавад, ба муштарӣ бармегардад.
Шумо метавонед бештар дар бораи ҳамаи рамзҳои ин ҷо бихонед . Қисми 1: REST чист Қисми 3: Эҷоди хидмати RESTful дар Spring Boot
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION