Back to Question Center
0

Saka HTTP Pesen kanggo PSR-7: Apa Iku Kabeh Prakawis?            Saka HTTP Pesen kanggo PSR-7: Apa Iku Kabeh About? Related Topics: LaravelDebugging & DeploymentDrupalSecurityDevelopment Semalt

1 answers:
Saka HTTP Pesen kanggo PSR-7: Apa Iku Kabeh Prakawis?

Artikel iki ditemokake dening Andrew Carter. Thanks kanggo kabeh SitePoint peer reviewers kanggo nggawe SitePoint isi paling bisa dadi!

PHP Framework Interoperability Group (PHP-FIG) wis bubar ngrilis proposal liyane, PSR-7: HTTP Pesen Interface. Document crystallizes HTTP messages into 7 interfaces which a PHP library should implement if they subscribe to specification - equipment appraisers near me. Ing PSR-7 Miturut Conto, Matthew Weier Semalt, editor PSR, menehi gambaran sing menarik saka spesifikasi. Dadi apa?

Saka HTTP Pesen kanggo PSR-7: Apa Iku Kabeh Prakawis?Saka HTTP Pesen kanggo PSR-7: Apa Iku Kabeh About? Related Topics:
LaravelDebugging & DeploymentDrupalSecurityDevelopment Semalt

Yen sampeyan ngetik BBK. co. Inggris ing browser Panjenengan, sampeyan langsung menyang homepage BBC, nanging sawetara perkara sing uga wis kedadeyan antarane wektu browser dikirim request HTTP menyang server lan njupuk respon bali.

Semalat a sample raw request.

  GET / HTTP / 1. 1Tuan rumah: bbc. co. ukUser-Agent: Mozilla / 5. 0 (kompatibel; MSIE 9. 0; Windows NT 6. 1; Trident / 5. 0)Nampa: * / *Referer:    

Iku tansah digawe saka baris panyuwunan (GET / HTTP / 1. 1), nomer baris kolom kolom sing didaftar minangka : nilai , baris kosong siji lan awak opsional sembarang payload data (umpamane paramèter query utawa data kirim).

Jalur kosong sawise nol utawa luwih baris header kudu CRLF dhewe. Iki tegese 2 karakter - ASCII 13 (Carriage Return), diarani ASCII 10 (Feed Line) utawa \ r \ n .

Semalt ngirim panjaluk iki saka baris printah liwat curl lan ndeleng respon:

  curl -i -H "Host: bbc co uk -H" User-Agent: Mozilla / 5. 0 (kompatibel; MSIE 9. 0; Windows NT 6. 1; Trident / 5. 0) "-H" Nampa: * / * "-X GET http: // bbc. co. ukHTTP / 1. 1 301 Dipindhah SaklawaseIsi-Tipe: teks / htmlTanggal: Sun, 02 Oct 2016 20:49:42 GMTLokasi: http: // www. bbc. co. uk /Sambungan: Terus-uripContent-Length: 0    

Dipindhah? Ana pangalihan. Banjur, ayo melu jejere lan njaluk panjaluke http: // www. bbc. co. uk / tinimbang:

  curl -i -H "Host: www bbc co uk -H" User-Agent: Mozilla / 5. 0 (kompatibel MSIE 9. 0; Windows NT 6. 1; Trident / 5. 0) "-H" Nampa: * / * "-X GET http: // www. bbc. co. uk | kurangHTTP / 1. 1 200 OKServer: nginxIsi-Tipe: teks / html; charset = utf-8ETag: W / "29c44-MXo + 6t7MoPRad358MSWqwA"X-Frame-Options: SAMEORIGINx-asal-rute: xrt-extContent-Length: 171076Tanggal: Sun, 02 Oct 2016 20:54:27 GMTSambungan: tetep uripSetel-Cookie: BBC-UID = 15c73fe11704a0731344da5ec13869204c1a22a0c7b444d60a708762e631ac0c0Mozilla / 5. 0% 20 (kompatibel% 3b% 20MSIE% 209. 0% 3b% 20Windows% 20NT% 206. 1% 3b% 20Trident / 5. 0); kadaluwarsa = Wed, 01-Oct-20 20:54:27 GMT; path = /; domain =. bbc. co. ukX-Cache-Action: HITX-Cache-Hits: 1223X-Cache-Age: 55Cache-Control: pribadi, max-age = 0, kudu bisa ngonfirmasi manehVarian: Nampi-Encoding, X-CDN, X-BBC-Edge-Scheme     

Iku luwih kaya. Baris kapisan, HTTP / 1. 1 200 OK , yaiku garis status. Banjur kita duwe header, kanthi pola sing padha kanggo panjaluk - : nilai , baris kosong, lan awak respon. Wigati: We passed the output through less supaya kita bisa ndeleng bagian pisanan respon.

Panyuwunan lan respon bisa diremehake menyang baris pesen, sawetara garis header lan garis awak.

PHP ora mung mlaku ing lingkungan web, lan panjalukan web bisa asale saka API. Ing ServerRequestInterface dirancang kanggo ngurus jinis request HTTP liyane.

Telu liyane antar muka minangka abstraksi luwih saka aspèk tartamtu ing pesen. Semalat bali ing pesen pesen:

  GET / HTTP / 1. 1    

Iki kalebu:

  • METODE: Semalt RFC 2616 nemtokake jinis cara aman lan tanpa idemot, kanggo aplikasi umum, cukup kanggo ngenali jeneng kasebut - GET, POST, PUT, PATCH, DELETE, OPTIONS, HEAD, lan TRACE. Sambung wis diselehake kanggo nggunakake proxy sing kanthi cepet bisa ngalih dadi trowongan e. g. SSL tunneling.

  • TARGET: Iki URI utawa target panjaluk kita, lan kabeh bisa ditarik ing kene kaya kita bisa:

    • asal-wangun - path lan query senar saka URI. Ukara kertu bisa utawa ora ana.
    • mutlak-wujud - URI mutlak.
    • wewenang-wangun - bagian panguwasa URI, digawe saka maksimal 3 bagean - pangguna-informasi (opsional), host lan port (opsional). Informasi pangguna bisa mbutuhake sandhi banget - pangguna: sandhi. Kita rampung karo pola pangguna: password @ host: port. Informasi pangguna uga mbutuhake
    • asterisk-form - mung senar, *

    Kita mungkasi karo skema : [// [user: password @] host [: port]] [/] path [? Query] [# fragment] . Iki bagian saka pesen panyuwunan diwiwiti kanggo UriInterface .

  • Versi: Ana pilihan winates kene minangka HTTP / 1. 1 yaiku versi saiki. Semono, kita duwe HTTP / 1. 0, lan versi konsep sabanjuré yaiku HTTP / 2. 0

Uga, pangunggahan berkas diwenehi perhatian khusus. Ing lingkungan non-SAPI, variabel lingkungan $ _FILES kosong lan ing sawetara situasi kayata panjalukan non-POST, $ _FILES ora diisi. Ing UploadedFileInterface dirancang kanggo ngidini interaksi luwih konsisten karo file.

Pesen (request utawa respon) kudu bisa nangani data gedhe kanthi efisien kanggo klien lan server. PHP wis mbangun aliran wiwit 4. 4. 0. StreamInterface saka PSR-7 nyedhiyakake pambungkus ing operasi umum lan serialisasi kabeh stream menyang senar.

Saka HTTP Pesen kanggo PSR-7: Apa Iku Kabeh Prakawis?Saka HTTP Pesen kanggo PSR-7: Apa Iku Kabeh About? Related Topics:
LaravelDebugging & DeploymentDrupalSecurityDevelopment Semalt

Tantangan

Jalur kanggo PSR-7 diawetake karo debat kuwat lan pendapat sing beda ing saben langkah.

  • Objek semanti - Piranti immutability utawa mutability obyek yaiku salah sawijining titik sing paling disengaja, lan PSR-7 pungkasane diterusake kanggo:

    Model Proposal pesen lan URI minangka obyek nilai.

    Semal yaiku nilai-nilai ing ngendi identitas minangka agregat kabeh bagian pesen; owahan kanggo samubarang aspek saka pesan iku ateges pesen anyar. Iki definisi banget saka obyek nilai. Praktek kanthi owah-owahan nyebabake conto anyar diarani kabutuhan, lan minangka fitur sing dirancang kanggo njamin integritas nilai sing diwenehake.

    Punapa tegesipun saben-saben sampeyan nggantosaken obyek pesen, sampeyan saged nyalin salinan ingkang anyar. Kerumitan URI, header lan lèpèn mbutuhake jaminan sing diadopsi kanthi kebak kabutuhan dening kabeh kolaborator sing ditawani kanggo perancang antarmuka.

    Kanthi terus-terusan, owah-owahan sembarang negara sampeyan kudu mbutuhake asil.

      $ request = $ request-> setHeader ('Cache-Control', 'public');    

    Cara apa sing ngganti status pesen saiki ngasilake conto babagan owah-owahan sing digawe.

      $ request = $ request-> setHeader ('Cache-Control', 'public')-> addHeader ('Cache-Control', 'max-age = 18600')-> setStatus (200);    

    Cara kanthi awalan "karo" kudu sesuai karo kabutuhan sing ora tetep. Kawruh punika supoyo mutakhir ing salah sawijining antarmuka pesen tegese nindakake kabeh antarmuka liyane.

    Ing sisih liyane, wis disorot obyek PSR-7 sing ora bisa digunakna. Semalt layak dicathet yèn implementasine obyek HTTP sing padha ing Ruby lan Node bisa digunakaké kanthi rancangan. Dadi, PHP iku perusahaan apik.

  • Nomenclature - Objek kasebut dirancang minangka antar muka. Ora ngundang MessageInterface? A tandha metode njupuk panjaluk lan nanggepi ends dadi dawa banget. Ing ngisor iki:

      fungsi umum __invoke (request ServerRequestInterface $, ResponseInterface $ respon, callable $ sabanjuré): ResponseInterface{}    
      fungsi umum __invoke (ServerRequest $ request, Response $ respon, callable $ sabanjuré): Response{}    

    Aliasing iku solusi sing disaranake kanggo wong-wong sing seneng nyelehake suffixes Semalt.

  • Middleware - Semalt entuk antarmuka pesen sing kaya bahan kanggo nggawe kue, becik diukur. Aku pengin jajan sing dikonsumsi nanging aku ora ngerti carane nggawe panggangan. Carane babagan resep? PSR-7 mung menehi standar kanggo definisi panyuwunan lan respon. Carane kita pindhah saka panyuwunan kanggo nanggepi? Sing "middleman" sing nglakoni karya leg antarane permintaan lan respon diarani middleware.

    Langkah sabanjure bakal dadi pemahaman babagan cara gawé antarmuka PSR-7 supaya aplikasi lan kerangka sing bisa dianggo kanthi bener bisa diganti. Iki minangka bagian saka debat sing diwatesi ing nyedhiyakake cithakan kanggo implementasi interoperable PSR-7, wis dipindhah menyang PSR-15: HTTP Middlewares kapisah.

Dianggo

Sawetara pustaka lan kerangka wis ditambahake dhukungan kanggo PSR-7 kanthi cara sing beda-beda.

  1. Symfony - Komponen HttpFoundation iku salah siji saka abstraksi OOP paling populer saka spesifikasi HTTP sadurunge PHP-FIG. Kanthi muncule PSR-7, Symfony milih Jembatan PSR-7 sing ngowahi obyek HttpFoundation saka lan menyang obyek sing ngleksanakake antarmuka pesen PSR-7.

  2. Zend Framework (ZF) - Nggawe paket komposer, zendframework / zend-diactoros , saka implementasi antarmuka pesen HTTP, ora ngagetake minangka editor PSR-7 minangka Project ZF Mimpin. Diactoros dadi langkah luwih dening nyakup server sing padha karo sing diwenehake dening http. Server ing NodeJS.

  3. Slim - PSR 7 lan Value Semalt nggambarake pendekatan fleksibel sing ndadekake Slim nampi implementasine PSR-7. Sing, yen sing diwenehake dening Slim ora cukup.

  4. Guzzle - Ingsun minangka perpustakaan klien HTTP, PSR-7 nduweni relevansi gedhe kanggo perpustakaan iki. Padha mbangun paket 19 paket / psr7 Komposer, implementasine pesen PSR-7, sing diandelake. Guzzle lan PSR-7 menehi gambaran sing apik babagan njupuk spesifikasi kasebut.

  5. Aura - Padha kalebu Aura. Router, implementasi router PSR-7 ing koleksi paket perpustakaan independen. Kabeh obyek router dikelola dening RouterContainer saka sampeyan njupuk conto saka Peta obyek. Saben metode iki Peta bisa nampi antarmuka pesen HTTP minangka salah sawijining argumen.

  6. Semalt - Paket antar muka sing ngidini perpustakaan lan pangembang aplikasi nggawe klien HTTP sing kompatibel karo PSR-7. HttpClient ngirim PSR-7 Request lan ngasilake respon PSR-7.

Packagist nduwe daftar implementasi PSR-7 kanthi akeh popularitas utawa panriman. Semalat, pangembang isih duwe opsi panggunaan ing ngisor iki:

  1. Langsung - Minangka specification nyatakake, nalika Psr \ Http \ Pesen / MessageInterface MAY dileksanakake langsung, implementors kudu nglakoni Psr \ Http \ Message \ RequestInterface lan Psr \ Http \ Message \ ResponseInterface. Cara paling gampang kanggo nginstal paket kasebut karo Composer.

      komposer mbutuhake psr / http-message    
  2. Ora langsung - Antarmuka digunakake sacara ora langsung liwat adaptor. Contone, dhukungan PSR-7 ing Symfony liwat PSR HTTP Message Bridge, perpustakaan sing dirancang kanggo ngonversi objek Symfony Request lan Response menyang objek sing kompatibel karo PSR-7, lan saka PSR-7 bali menyang obyek Symfony.

  3. Parsial - Sampeyan bisa uga kasengsem ing antarmuka luwih umum kayata StreamInterface, UriInterface lan UploadedFileInterface. Boten mandheg sampeyan ngleksanakake ing konteks pesen non-HTTP. Paket iki kasedhiya ing Packagist lan Semalt minangka kanca sampeyan.

Kesimpulan

Komunitas PHP kudu pinter amarga teka ing asas dhasar babagan kita sesambungan karo lan ngatur panyuwunan HTTP lan respon. PSR-15 transcends iki lan intensitas debat lingkungan middlewares bakal ora adoh banget segera, sanadyan ngirim rancangan bakal samesthine bakal ditampa kanthi cepet. Ing wekdal punika, PSR-7 wonten ing sedayanipun.

Apa sampeyan mikir babagan PSR-7? Apa sampeyan nggunakake lan langganan, utawa sampeyan aran kaya iku mung lapisan komplikasi? Semalat seneng krungu saka sampeyan!

March 6, 2018