Ang post na ito ay isang sagot sa isang tanong na itinanong sa isang komento sa isa sa aking mga artikulo.
Sa artikulong ito gusto kong sabihin sa iyo kung ano ang mga pamamaraan ng HTTP na GET/POST/PUT/DELETE at iba pa, kung bakit sila naimbento at kung paano gamitin ang mga ito alinsunod sa REST.
HTTP
Kaya, ano ang isa sa mga pangunahing protocol ng Internet? Ipapadala ko ang mga pedants sa RFC2616, at sasabihin ko sa iba ang tao :)Inilalarawan ng protocol na ito ang pakikipag-ugnayan sa pagitan ng dalawang computer (client at server), na binuo batay sa mga mensaheng tinatawag na kahilingan (Request) at tugon (Response). Ang bawat mensahe ay binubuo ng tatlong bahagi: isang panimulang linya, mga header at isang katawan. Sa kasong ito, ang panimulang linya lamang ang kinakailangan.
Ang mga panimulang linya para sa kahilingan at tugon ay may iba't ibang mga format - interesado lang kami sa panimulang linya ng kahilingan, na ganito ang hitsura:
PARAAN URI HTTP/ VERSION ,
Kung saan ang METHOD ay ang HTTP request method, ang URI ay ang resource identifier, ang VERSION ay ang protocol na bersyon (kasalukuyang bersyon 1.1 ay kasalukuyang).
Ang mga header ay isang koleksyon ng mga pares ng name-value na pinaghihiwalay ng colon. Ang mga header ay naghahatid ng iba't ibang impormasyon ng serbisyo: pag-encode ng mensahe, pangalan at bersyon ng browser, address kung saan nanggaling ang kliyente (Referrer), at iba pa.
Ang katawan ng mensahe ay ang aktwal na data na ipinapadala. Sa tugon, ang ipinadalang data ay karaniwang ang HTML na pahina na hiniling ng browser, at sa kahilingan, halimbawa, sa katawan ng mensahe, ang mga nilalaman ng mga file na na-upload sa server ay ipinadala. Ngunit bilang panuntunan, walang katawan ng mensahe sa kahilingan.
Halimbawa ng Pakikipag-ugnayan sa HTTP
Tingnan natin ang isang halimbawa.Kahilingan:
GET /index.php HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Tuko/2008050509 Firefox/3.0b5 Tanggapin: text/html Koneksyon: isara
Ang unang linya ay ang linya ng query, ang natitira ay mga header; nawawala ang katawan ng mensahe
Sagot:
HTTP/1.0 200 OK Server: nginx/0.6.31 Content-Wika: ru Content-Type: text/html; charset=utf-8 Content-Length: 1234 Connection: isara ... ANG HTML PAGE MISMO...
Mga Mapagkukunan at Pamamaraan
Bumalik tayo sa panimulang linya ng kahilingan at tandaan na naglalaman ito ng isang parameter bilang URI. Ito ay kumakatawan sa Uniform Resource Identifier - isang pare-parehong resource identifier. Ang isang mapagkukunan ay, bilang isang panuntunan, isang file sa server (isang halimbawa ng URI sa kasong ito ay "/styles.css"), ngunit sa pangkalahatan ang isang mapagkukunan ay maaari ding ilang abstract na bagay ("/blogs/webdev/" - mga puntos sa "Web" block development" sa halip na sa isang partikular na file).Ang uri ng kahilingan sa HTTP (tinatawag ding pamamaraan ng HTTP) ay nagsasabi sa server kung anong aksyon ang gusto naming gawin sa mapagkukunan. Sa una (sa unang bahagi ng 90s) ay ipinapalagay na ang kliyente ay maaaring gusto lamang ng isang bagay mula sa isang mapagkukunan - upang matanggap ito, ngunit ngayon gamit ang HTTP protocol maaari kang lumikha ng mga post, mag-edit ng isang profile, magtanggal ng mga mensahe at marami pa. At ang mga pagkilos na ito ay mahirap pagsamahin sa terminong "resibo".
Upang ibahin ang mga pagkilos mula sa mga mapagkukunan sa antas ng mga pamamaraan ng HTTP, naimbento ang mga sumusunod na opsyon:
- GET - pagkuha ng mapagkukunan
- POST - paglikha ng mapagkukunan
- PUT - pag-update ng mapagkukunan
- DELETE - pagtanggal ng mapagkukunan
Papasok ang REST
Ang REST (Representational State Transfer) ay isang terminong ipinakilala noong 2000 ni Roy Fielding, isa sa mga developer ng HTTP protocol, bilang pangalan ng isang pangkat ng mga prinsipyo para sa pagbuo ng mga web application. Sa pangkalahatan, ang REST ay sumasaklaw sa isang mas malawak na lugar kaysa sa HTTP - maaari rin itong magamit sa ibang mga network na may iba pang mga protocol. Inilalarawan ng REST ang mga prinsipyo ng pakikipag-ugnayan sa pagitan ng kliyente at server, batay sa mga konsepto ng "resource" at "verb" (maaaring maunawaan bilang paksa at panaguri). Sa kaso ng HTTP, ang mapagkukunan ay tinutukoy ng URI nito, at ang pandiwa ay ang pamamaraang HTTP.Iminumungkahi ng REST na iwanan ang paggamit ng parehong URI para sa iba't ibang mapagkukunan (iyon ay, ang mga address ng dalawang magkaibang artikulo tulad ng /index.php?article_id=10 at /index.php?article_id=20 - hindi ito isang REST-way) at gamit ang iba't ibang pamamaraan ng HTTP para sa iba't ibang pagkilos. Iyon ay, ang isang web application na nakasulat gamit ang REST na diskarte ay magtatanggal ng isang mapagkukunan kapag na-access ito gamit ang pamamaraang HTTP DELETE (siyempre, hindi ito nangangahulugan na kinakailangan upang bigyan ng pagkakataon na tanggalin ang lahat at lahat, ngunit anuman ang kahilingan sa pagtanggal ng application ay dapat gumamit ng pamamaraang HTTP DELETE).
Ang REST ay nagbibigay ng kakayahan sa mga programmer na magsulat ng mga standardized at bahagyang mas magandang mga web application kaysa dati. Gamit ang REST, ang URI upang magdagdag ng bagong user ay hindi magiging /user.php?action=create (GET/POST method), ngunit simpleng /user.php (strictly POST method).
Bilang resulta, sa pamamagitan ng pagsasama-sama ng umiiral na detalye ng HTTP at ang REST na diskarte, sa wakas ay may katuturan ang iba't ibang pamamaraan ng HTTP. GET - nagbabalik ng mapagkukunan, POST - lumilikha ng bago, PUT - nag-a-update ng umiiral na, DELETE - tinatanggal ito.
Problema?
Oo, may maliit na problema sa paggamit ng REST sa pagsasanay. Ang problemang ito ay tinatawag na HTML.Ang mga kahilingan sa PUT/DELETE ay maaaring ipadala gamit ang XMLHttpRequest, sa pamamagitan ng manu-manong pakikipag-ugnayan sa server (sabihin, sa pamamagitan ng curl o kahit sa pamamagitan ng telnet), ngunit hindi ka makakagawa ng HTML form na nagpapadala ng ganap na kahilingan sa PUT/DELETE.
Ang bagay ay, ang HTML na detalye ay hindi nagpapahintulot sa iyo na lumikha ng mga form na nagsusumite ng data maliban sa pamamagitan ng GET o POST. Samakatuwid, upang gumana nang normal sa iba pang mga pamamaraan, kailangan mong tularan ang mga ito nang artipisyal. Halimbawa, sa Rack (ang mekanismo kung saan nakikipag-ugnayan si Ruby sa web server; ang Rails, Merb at iba pang Ruby frameworks ay ginawa gamit ang Rack), maaari kang magdagdag ng nakatagong field sa form na may pangalang "_method", at tukuyin ang pangalan ng pamamaraan bilang ang halaga (hal. "PUT") - sa kasong ito, isang POST na kahilingan ang ipapadala, ngunit ang Rack ay magagawang magpanggap na nakatanggap ito ng PUT sa halip na isang POST.
Ang GET at POST na pamamaraan sa HTTP at HTTPS ay ang dalawang pinakasikat na paraan na ginagamit upang maglipat ng data mula sa kliyente patungo sa server gamit ang HTTP (HyperText Transfer Protocol). Parehong maaaring gamitin ang GET at POST upang magpadala ng kahilingan at makatanggap ng tugon, ngunit may mga makabuluhang pagkakaiba sa pagitan nila.
Ang pagkakaiba sa pagitan ng GET at POST na mga kahilingan sa HTTP o HTTPS ay isang tanyag na tanong sa bawat panayam sa web programming. Dahil ang HTML ay independiyente sa teknolohiya ng web server tulad ng Java, ASP o PHP at ang HTTP ang pangunahing protocol sa espasyo ng Internet, ang kahalagahan ng pag-unawa sa mga pamamaraan ng GET at POST ay hindi maaaring malinaw na balewalain. Sa artikulong ito, titingnan natin kung ano ang pamamaraan ng HTTP GET, kung ano ang pamamaraan ng HTTP POST, kung kailan gagamitin ang bawat kahilingan, at kung ano ang pagkakaiba ng mga ito. Tingnan natin ang bawat konsepto nang hiwalay.
Ano ang HTML?
Ang HTML ay ang wikang ginagamit upang lumikha ng mga web page. Ang hypertext ay tumutukoy sa mga hyperlink na maaaring naglalaman ng isang HTML page. Ang markup language ay tumutukoy sa paraan ng paggamit ng mga tag upang tukuyin ang layout ng isang page at ang mga elemento sa isang page.
Nasa ibaba ang isang halimbawa ng HTML na ginagamit upang tukuyin ang isang pangunahing web page na may pamagat at isang talata ng teksto:
<Голова>
<Название>TechTerms.com название>
HEAD>
<Тело>
Ito ay isang halimbawa ng isang talata sa HTML. p>
Body>
Html>
Ang unang linya ay tumutukoy sa uri ng nilalaman na nilalaman sa dokumento.,
At , na lahat ay kasama sa halimbawa sa itaas. Ang pamagat ng pahina, metadata at mga link sa mga anchor file ay inilalagay sa pagitan ng aktwal na nilalaman ng pahina na inilalagay sa pagitan ng mga tag .Ang web ay dumaan sa maraming pagbabago sa nakalipas na ilang dekada, ngunit ang HTML ay palaging ang pangunahing wikang ginagamit upang bumuo ng mga web page. Kapansin-pansin, habang ang mga website ay naging mas advanced at interactive, ang HTML ay naging mas simple. Kung ihahambing mo ang pinagmulan ng isang HTML5 page sa isang katulad na page na nakasulat sa HTML 4.01 o XHTML 1.0, ang HTML5 page ay magkakaroon ng mas kaunting code. Ito ay dahil umaasa ang modernong HTML sa Cascading Style Sheets o JavaScript upang i-format ang halos lahat ng elemento sa loob ng isang page.
Maraming mga dynamic na website ang bumubuo ng mga web page sa mabilisang gamit ang isang server-side scripting language gaya ng PHP o ASP. Gayunpaman, kahit na ang mga dynamic na pahina ay dapat na naka-format gamit ang HTML. Samakatuwid, ang mga wika ng script ay madalas na bumubuo ng HTML code na ipinadala sa web browser.
Ang HTTP Hypertext Transfer Protocol ay idinisenyo para sa komunikasyon sa pagitan ng mga kliyente at server at gumagana bilang protocol ng pagtugon sa kahilingan.
Ang web browser ay maaaring maging kliyente, at ang application sa computer na nagho-host ng website ay maaaring maging server.
Ang kliyente (browser) ay nagpapadala ng HTTP na kahilingan sa server, ang server ay nagbabalik ng tugon na naglalaman ng impormasyon tungkol sa katayuan ng kahilingan at maaari ring naglalaman ng hiniling na nilalaman.
Dalawang paraan ng kahilingan GET at POST
Dalawang karaniwang ginagamit na paraan para sa kahilingan-tugon sa pagitan ng kliyente at server ay:
GET - humiling ng data mula sa tinukoy na mapagkukunan;
POST - nagpapadala ng data na ipoproseso sa tinukoy na mapagkukunan.
Ang pagsasalin ng GET at POST ay literal na nangangahulugang pagtanggap at post-processing.
Higit pa tungkol sa HTTP
Ang HTTP ay isang protocol na ginagamit upang magpadala ng data sa Internet. Ito ay bahagi ng Internet Protocol suite at tumutukoy sa mga utos at serbisyo na ginagamit upang magpadala ng data ng web page.
Gumagamit ang HTTP ng modelo ng server-client. Ang kliyente ay maaaring isang computer sa bahay, laptop, o mobile device. Ang isang HTTP server ay karaniwang isang web host na nagpapatakbo ng software ng web server tulad ng Apache o IIS. Kapag ang isang user ay nag-access sa isang website, ang browser ay nagpapadala ng isang kahilingan sa naaangkop na web server at tumugon sa isang HTTP status code. Kung wasto ang URL at ipinagkaloob ang koneksyon, ipapadala ng server ang web page at mga nauugnay na file sa browser.
Kasama sa mga karaniwang HTTP status code ang:
200 — matagumpay na kahilingan (umiiral ang web page);
301 - Patuloy na gumagalaw (madalas na nagre-redirect sa isang bagong URL);
401 — hindi awtorisadong kahilingan (kailangan ng pahintulot);
500 - Error sa panloob na server (kadalasang sanhi ng hindi tamang configuration ng server).
POST at GET sa HTTP
Tinutukoy ng HTTP ang mga command na GET at POST na ginagamit upang iproseso ang mga pagsusumite ng form sa mga website. Ang CONNECT command ay ginagamit upang mapadali ang isang secure na koneksyon na naka-encrypt gamit ang SSL. Nagaganap ang mga naka-encrypt na HTTP na koneksyon sa HTTPS, isang extension ng HTTP na idinisenyo para sa mga secure na paglilipat ng data.
Ang mga URL na nagsisimula sa "http://" ay naa-access sa mga karaniwang hypertext transfer protocol at bilang default ay gumagamit ng port 80. Ang mga URL na nagsisimula sa "https://" ay naa-access sa isang secure na HTTPS na koneksyon at kadalasang gumagamit ng port 443.
POST
Ang POST ay isang serye ng mga pagsubok sa system na ginagawa ng mga computer at iba pang mga electronic device kapag naka-on ang mga ito. Maaaring ipakita ang mga resulta ng pagsubok sa screen, ipakita sa pamamagitan ng mga kumikislap na LED, o simpleng naitala sa loob. Sa mga computer system, ang operasyon ng POST ay ginagawa sa simula ng pagkakasunud-sunod ng boot. Kung pumasa ang lahat ng pagsubok, awtomatikong magpapatuloy ang natitirang proseso ng pagsisimula.
Ang mga operating system ng Mac at Windows device ay tumatakbo sa POST tuwing magbo-boot o magre-restart ang computer. Sinusuri ng pag-scan ang hardware at tinitiyak na gumagana nang tama ang processor, RAM, at mga storage device. Kung ang isang error ay nangyari sa panahon ng POST, ang proseso ng pagsisimula ay maaaring i-pause o ganap na huminto, at ang isang mensahe ay maaaring lumitaw sa monitor Sa mga PC, ang mga error sa POST ay madalas na lumalabas sa screen ng impormasyon ng BIOS. Maaaring lumitaw ang mga ito bilang mga cryptographic na code gaya ng "08" o bilang isang mensahe ng system gaya ng "Error sa offset ng memorya ng system." Sa Mac, ang mga error sa POST ay madalas na ipinapahiwatig ng isang simpleng graphic, tulad ng isang sirang icon ng folder, na nagpapahiwatig na ang boot device ay hindi natagpuan.
Mga pisikal na pagpapakita
Sa ilang mga kaso, ang screen ng computer ay maaaring hindi mag-on bago ang mga error sa POST. Kung nangyari ito, maaaring ipakita ang mga error code sa pamamagitan ng mga kumikislap na LED o beep. Halimbawa, ang isang Apple iMac ay magpe-play ng tatlong magkakasunod na tono, i-pause ng limang segundo, at pagkatapos ay ulitin ang mga tono kapag may nakitang masamang RAM sa panahon ng startup. Karamihan sa mga PC ay nagbe-beep din kapag may nakitang mga error sa POST, bagama't ang bawat tagagawa ay gumagamit ng kanilang sariling mga code.
Ang POST ay isang medyo teknikal na termino na ginagamit lamang ng mga computer technician sa regular na batayan. Gayunpaman, ito ay isang magandang acronym dahil nakakatulong ito sa iyong mas maunawaan ang mga mensahe ng error na maaaring lumabas sa mga computer o iba pang mga electronic device. Kung hindi magsisimula ang iyong computer dahil sa isang POST error, maaari kang gumamit ng isa pang device upang mahanap ang kahulugan at sanhi ng error mula sa website ng gumawa. Pagkatapos ay maaari mong gawin ang naaangkop na aksyon - alisin ang memory module o muling i-install ang video card at pagkatapos ay i-restart ang kagamitan.
GET
Ang POST ay isa ring paraan ng pagpasa ng mga HTML form variable mula sa isang web page patungo sa isa pa nang hindi ipinapakita ang mga ito sa address bar. Ang isang alternatibong paraan ay GET, na nagdaragdag ng mga halaga sa URL. Ang mga kahilingan sa HTTP POST ay nagbibigay ng karagdagang data mula sa kliyente (browser) patungo sa server sa katawan ng mensahe. Sa kabaligtaran, kasama sa mga kahilingan sa GET ang lahat ng kinakailangang data sa URL. Ang mga form sa HTML ay maaaring gumamit ng anumang paraan sa pamamagitan ng pagtukoy ng method=POST o method=GET (default) sa elemento