ห้องสมุดนี้ไม่ได้อยู่ในการพัฒนาที่ใช้งานอยู่
โปรดพิจารณา guzzlehttp/guzzle หรือห้องสมุดอื่นแทน
แก้ไขข้อบกพร่องเท่านั้น
Hyper เป็นไคลเอนต์ HTTP ที่มีจุดมุ่งหมายเพื่อให้อินเทอร์เฟซที่เรียบง่าย แต่ทรงพลังสำหรับการโทร HTTP และการดึงข้อมูลและจัดการข้อมูล API
Hyper::get('http://some/url')Hyper::make(...)->get('http://some/url')Response ซึ่งให้ข้อมูลที่เป็นประโยชน์เช่นรหัสสถานะ HTTP ร่างกายและส่วนหัวResponse ทุกครั้งจะผสมผสานใน rexlabs array-object ซึ่งช่วยให้คุณสอบถามการตอบสนอง API ได้อย่างง่ายดายRequest เดิมผ่าน $response->getRequest() <?php
use Rexlabs HyperHttp Hyper ;
$ response = Hyper:: get ( ' http://openlibrary.org/subjects/love.json ' );
// The first book for 'love' is: Wuthering Heights
echo " The first book for ' { $ response -> name } ' is: { $ response -> works -> first ()-> title }n" ;
echo " Total works: { $ response -> works -> count ()} books n" ;เพื่อติดตั้งในโครงการของคุณ:
composer require rexlabs/hyper-http วิธีการพักผ่อนทั้งหมดส่งคืนวัตถุ Response ซึ่งทำให้การโต้ตอบกับการตอบสนองง่าย
<?php
use Rexlabs HyperHttp Hyper ;
$ response = Hyper:: get ( ' https://example.com/url ' );
echo ' Status Code: ' . $ response -> getStatusCode (). "n" ;
echo ( string ) $ response ; // Output the response bodyเนื่องจากการตอบสนอง Mixin ArrayObject คุณสามารถดึงและจัดการค่าได้อย่างง่ายดายจากการตอบสนอง:
<?php
use Rexlabs HyperHttp Hyper ;
// Fetch historical price via CryptoCompare's public API for Ethereum
$ response = Hyper:: get ( ' https://min-api.cryptocompare.com/data/pricehistorical ' , [
' fsym ' => ' ETH ' ,
' tsyms ' => ' BTC,USD ' ,
' ts ' => ' 1452680400 ' ,
]);
// Output prices
printf ( " ETH->USD: %s n" , $ response -> get ( ' ETH.USD ' ));
printf ( " ETH->BTC: %s n" , $ response -> get ( ' ETH.BTC ' )); ใช้ make() เพื่อทำให้การสร้างอินสแตนซ์ง่ายขึ้นจากนั้นตั้งค่าวัตถุสำหรับคำขอในอนาคต:
<?php
use Rexlabs HyperHttp Hyper ;
use Rexlabs Logger CustomLogger ;
$ hyper = Hyper:: make ()
-> setBaseUri ( ' http://example.com/api/v1 ' )
-> setHeader ( ' X-App-Identity ' , ' Some App ' )
-> setHeader ( ' X-Correlation-Id ' , ' 12345 ' )
-> setLogger ( new CustomLogger );$hyper = Hyper::make(array $config = [], GuzzleHttpClient $guzzle, PsrLogLoggerInterface $logger)หากต้องการควบคุมการสร้างอินสแตนซ์ให้สมบูรณ์ให้ใช้ตัวสร้างและส่งผ่านในอินสแตนซ์ Guzzle:
<?php
use Rexlabs HyperHttp Client ;
use GuzzleHttp Client as GuzzleClient ;
use Psr Log NullLogger ;
$ hyper = new Client ( new GuzzleClient (), new NullLogger (), [
' base_uri ' => ' http://example.com/api/v1 ' ,
' headers ' => [
' X-App-Identity ' => ' Some App ' ,
],
]);
$ response = $ hyper -> get ( ' /messages ' );คุณสามารถสร้างคำขอ CURL สำหรับการรันจากบรรทัดคำสั่งเพื่อทำซ้ำคำขอล่าสุดของคุณ:
<?php
use Rexlabs HyperHttp Hyper ;
echo Hyper:: get ( ' https://example.com/api/v1/resources ' )
-> getCurlRequest ();เอาท์พุท:
curl
' https://min-api.cryptocompare.com/data/pricehistorical?fsym=ETH&tsyms=BTC%2CUSD&ts=1452680400&extraParams=your_app_name '
-H ' Content-Type: application/json ' -H ' Accept: application/json ' Hyper จัดเตรียมวิธีการต่อไปนี้สำหรับการโต้ตอบกับจุดสิ้นสุดระยะไกล:
get(mixed $uri, array $query = [], array $headers = [], array $options = []): Response
ส่งคำขอ GET HTTP และส่งคืนคำตอบ:
$ response = Hyper:: get ( ' https://example.com ' , [ ' sort ' => ' latest ' ], [ ' X-Greeting ' => ' Hello! ' ]);
$ response = $ hyper -> get ( ' /v1/people ' );$uri เป็นสตริงหรือ Uri หากสตริงไม่สมบูรณ์มันจะถูกผนวกเข้ากับ URI พื้นฐาน$query เป็นอาร์เรย์ที่เป็นตัวเลือกของพารามิเตอร์การสืบค้นซึ่งจะผนวกเข้ากับ URI$headers เป็นอาร์เรย์เสริมของส่วนหัว (จัดทำดัชนีโดยชื่อส่วนหัว) ที่จะรวมเข้ากับส่วนหัวทั่วโลก$options เป็นอาร์เรย์เสริมของตัวเลือกไคลเอนต์ Guzzle post(mixed $uri, mixed $body = null, array $headers = [], array $options = []): Response
ส่งคำขอโพสต์ HTTP และส่งคืนคำตอบ:
$ response = Hyper:: post ( ' https://example.com/fruit ' , ' apples ' );
$ response = $ hyper -> post ( ' /v1/people ' , [ ' name ' => ' Bob ' , ' age ' => 25 ]);$uri เป็นสตริงหรือ Uri หากสตริงไม่สมบูรณ์มันจะถูกผนวกเข้ากับ URI พื้นฐาน$body เป็นน้ำหนักบรรทุก หากคุณให้อาร์เรย์มันจะถูกแปลงและขนส่งเป็น JSON$headers เป็นอาร์เรย์เสริมของส่วนหัว (จัดทำดัชนีโดยชื่อส่วนหัว) ที่จะรวมเข้ากับส่วนหัวทั่วโลก$options เป็นอาร์เรย์เสริมของตัวเลือกไคลเอนต์ Guzzleวิธีการอื่น:
$response = $hyper->postForm($uri, $formParams, $headers, $options);$response = $hyper->postMultipartForm($uri, $formParams, $headers, $options); put(mixed $uri, mixed $body = null, array $headers = [], array $options = []): Response
ส่งคำขอวาง HTTP และส่งคืนคำตอบ:
$ response = Hyper:: put ( ' https://example.com/fruit ' , ' apples ' );
$ response = $ hyper -> put ( ' /v1/people ' , [ ' name ' => ' Bob ' , ' age ' => 25 ]);$uri เป็นสตริงหรือ Uri หากสตริงไม่สมบูรณ์มันจะถูกผนวกเข้ากับ URI พื้นฐาน$body เป็นน้ำหนักบรรทุก หากคุณให้อาร์เรย์มันจะถูกแปลงและขนส่งเป็น JSON$headers เป็นอาร์เรย์เสริมของส่วนหัว (จัดทำดัชนีโดยชื่อส่วนหัว) ที่จะรวมเข้ากับส่วนหัวทั่วโลก$options เป็นอาร์เรย์เสริมของตัวเลือกไคลเอนต์ Guzzle patch(mixed $uri, mixed $body = null, array $headers = [], array $options = []): Response
ส่งคำขอแพตช์ HTTP และส่งคืนการตอบกลับ:
$ response = Hyper:: patch ( ' https://example.com/fruit ' , ' apples ' );
$ response = $ hyper -> patch ( ' /v1/people ' , [ ' name ' => ' Bob ' , ' age ' => 25 ]);$uri เป็นสตริงหรือ Uri หากสตริงไม่สมบูรณ์มันจะถูกผนวกเข้ากับ URI พื้นฐาน$body เป็นน้ำหนักบรรทุก หากคุณให้อาร์เรย์มันจะถูกแปลงและขนส่งเป็น JSON$headers เป็นอาร์เรย์เสริมของส่วนหัว (จัดทำดัชนีโดยชื่อส่วนหัว) ที่จะรวมเข้ากับส่วนหัวทั่วโลก$options เป็นอาร์เรย์เสริมของตัวเลือกไคลเอนต์ Guzzle delete(mixed $uri, mixed $body = null, array $headers = [], array $options = []): Response
ส่งคำขอลบ HTTP และส่งคืนการตอบกลับ:
$ response = Hyper:: delete ( ' https://example.com/fruit ' , ' apples ' );
$ response = $ hyper -> delete ( ' /v1/people/1 ' );$uri เป็นสตริงหรือ Uri หากสตริงไม่สมบูรณ์มันจะถูกผนวกเข้ากับ URI พื้นฐาน$body เป็นน้ำหนักบรรทุกเสริม หากคุณให้อาร์เรย์มันจะถูกแปลงและขนส่งเป็น JSON$headers เป็นอาร์เรย์เสริมของส่วนหัว (จัดทำดัชนีโดยชื่อส่วนหัว) ที่จะรวมเข้ากับส่วนหัวทั่วโลก$options เป็นอาร์เรย์เสริมของตัวเลือกไคลเอนต์ Guzzle call(string $method, mixed $uri, mixed $body, array $headers, array $options): Response
ส่งคำขอ HTTP ทั่วไปโดยระบุ method เป็นอาร์กิวเมนต์แรก
// Statically
$ response = Hyper:: call ( ' MOVE ' , ' myfile1234 ' , [ ' new_location ' => ' some_folder ' ]);
// Http method verbs may also be invoked via method name
$ response = Hyper:: move ( ' myfile1234 ' , [ ' new_location ' => ' some_folder ' ]);
$ response = Hyper:: somethingelse (...);
// Via object
$ response = $ hyper -> call ( ' MOVE ' , ' myfile1234 ' , [ ' new_location ' => ' some_folder ' ]);$method คือคำกริยา HTTP เช่น GET หรือบางสิ่งบางอย่างที่ไม่ได้เป็นส่วนหนึ่งของมาตรฐาน$uri เป็นสตริงหรือ Uri หากสตริงไม่สมบูรณ์มันจะถูกผนวกเข้ากับ URI พื้นฐาน$body เป็นน้ำหนักบรรทุกเสริม หากคุณให้อาร์เรย์มันจะถูกแปลงและขนส่งเป็น JSON$headers เป็นอาร์เรย์เสริมของส่วนหัว (จัดทำดัชนีโดยชื่อส่วนหัว) ที่จะรวมเข้ากับส่วนหัวทั่วโลก$options เป็นอาร์เรย์เสริมของตัวเลือกไคลเอนต์ Guzzle วิธีการใช้งานจาก RexlabsHyperHttpMessageRequest Object:
ส่งคืนวัตถุ Uriinterface ซึ่งห่อหุ้ม URI/URL สำหรับคำขอนี้
ส่งคืนคำกริยาวิธี HTTP สำหรับคำขอนี้
retur อาร์เรย์ของส่วนหัวสำหรับ Request นี้
ส่งคืนคำขอ CURL (สตริง) ที่เหมาะสมสำหรับการรันจากบรรทัดคำสั่ง มีประโยชน์สำหรับการดีบักคำขอ
วิธีการใช้งานจาก RexlabsHyperHttpMessageResponse Object:
ส่งคืน RexlabsHyperHttpMessageRequest Object ที่เชื่อมโยงกับ Response
ส่งคืนคำขอ CURL (สตริง) ที่เหมาะสมสำหรับการรันจากบรรทัดคำสั่ง มีประโยชน์สำหรับการดีบักคำขอ
ส่งคืนรหัสสถานะ HTTP สำหรับ Response นี้ เช่น 200
ส่งคืนวลีเหตุผล HTTP ที่เกี่ยวข้องกับรหัสสถานะ เช่น "ตกลง"
ส่งคืน true ถ้านี่เป็นการตอบสนอง JSON
แปลงการตอบสนอง JSON เป็นอาร์เรย์และส่งคืนอาร์เรย์
แปลงการตอบสนอง JSON เป็น ArrayObject
วัตถุ Response ทุกครั้งมีวิธีการและฟังก์ชั่นทั้งหมดของคลาส ArrayObject จากแพ็คเกจ rexlabsarray-object
ซึ่งหมายความว่าขึ้นอยู่กับการตอบสนองต่อการตอบสนองต่อไปนี้:
{
"books" : [
{
"id" : 1 ,
"title" : " 1984 " ,
"author" : " George Orwell "
},
{
"id" : 2 ,
"title" : " Pride and Prejudice " ,
"author" : " Jane Austen "
}
]
}คุณสามารถทำหน้าที่ต่อไปนี้:
$ response -> books ; // Instance of ArrayObject
$ response -> books -> pluckArray ( ' author ' ); // array [ 'George Orwell', 'Jane Austen' ]
$ response -> pluckArray ( ' books.author ' ); // array [ 'George Orwell', 'Jane Austen' ]
$ response -> books -> count (); // 2
$ response -> books -> isCollection (); // true
$ response -> books [ 0 ]; // Instance of ArrayObject
$ response -> books [ 0 ]-> isCollection (); // false
$ response -> books [ 0 ]-> id ; // 1
$ response -> get ( ' books.1.title ' ); // "Pride and Prejudice"
foreach ( $ response -> books as $ book ) {
echo "{ $ book -> title } by { $ book -> author }n" ;
}คุณยังสามารถโทร:
$ obj = $ response -> toObject (); // Instance of Arraybject ตั้งค่าการกำหนดค่าเริ่มต้นสำหรับไคลเอนต์ทั้งหมด (ค่าเริ่มต้นเป็น [])
Hyper:: setDefaultConfig ( $ config );ตั้งค่าการกำหนดค่าสำหรับไคลเอนต์นี้ (ค่าจะแทนที่ / ผสานกับค่าเริ่มต้น)
$ client = Hyper:: make ( $ config ); ตั้งค่าเครื่องบันทึกเริ่มต้นที่ลูกค้าทั้งหมดใช้ที่ไม่ได้ให้ไว้
ต้องใช้ LoggerInterface (ค่าเริ่มต้นเป็น NullLogger )
Hyper:: setDefaultLogger ( $ logger );บันทึกสตริง Curl สำหรับคำขอทั้งหมด (ต้องใช้ชุดตัวบันทึก)
$ config = [
' log_curl ' => true ,
]; ตั้งค่าการกำหนดค่าที่ส่งผ่านไปยัง GuzzleClient พื้นฐาน
$ config = [
' guzzle ' => [
' verify ' => false ,
],
];
// Set for all clients
Hyper:: setDefaultConfig ( $ config );
// Set for one client
$ client = Hyper:: make ( $ config );เพื่อเรียกใช้การทดสอบ:
composer testsเพื่อเรียกใช้รายงานความคุ้มครอง:
composer coverage รายงานความครอบคลุมคือเอาต์พุตไปที่ ./tests/report/index.html
Hyper อนุญาตให้ขยายสำหรับลูกค้าที่กำหนดเองโดย:
MyHyperSubclass แบบคงที่จะส่งคืนอินสแตนซ์ที่ถูกต้องที่สร้างโดย MyHyperSubclassHyper จะส่งคืนอินสแตนซ์ที่ถูกต้องที่สร้างขึ้นโดย Hyperprotected static function makeClient เพื่อปรับแต่งคลาสไคลเอนต์ (เช่นแทนที่ไคล new Client ด้วย new MyClient )protected static function makeConfig เพื่อปรับแต่งการกำหนดค่าไคลเอนต์เริ่มต้นprotected static function makeGuzzleConfig เพื่อปรับแต่งไคลเอนต์ Guzzle เริ่มต้นprotected static function getBaseUri เพื่อให้ base_uri เริ่มต้นกับไคลเอนต์ ยินดีต้อนรับการมีส่วนร่วมโปรดส่งคำตอบแบบดึงหรือสร้างปัญหา รหัสที่ส่งของคุณควรจัดรูปแบบโดยใช้มาตรฐาน PSR-1/PSR-2