ÔÚÏÖ´úWeb¿ª·¢µÄÎę̀ÉÏ£¬PHPÒÀÈ»ÊÎÑÝ×Ų»¿É»òȱµÄ½ÇÉ«¡£´Ó¹Å°åµÄÍøÒ³ÌìÉúµ½ÏÖÔÚÖØ´óµÄAPIЧÀÍ£¬PHPµÄÒ»Ö±ÑݽøÍƶ¯×Å»¥ÁªÍøÉú³¤µÄÿһ¸öϸ½Ú¡£¶øÔÚÕⲨÊÖÒÕÀ˳±ÖУ¬±ê×¼»¯³ÉΪÌáÉý´úÂë¿Éά»¤ÐÔ¡¢À©Õ¹ÐԺͼæÈÝÐÔµÄÖ÷ÒªÍÆ¶¯Á¦¡£PHP-FIG£¨PHPFrameworkInteropGroup£©ÕýÊÇÒýÁìÕâһƫÏòµÄ½¹µãʵÁ¦£¬ËüÒ»Ö±ÍÆ³öһϵÁеġ°ÍƼö±ê×¼¡±£¬ÒÔÔö½øPHP²î±ð¿ò¼Ü¡¢×é¼þ¼äµÄÐ×÷¡£
¿ËÈÕ£¬±¸ÊÜÖõÄ¿µÄPSR-17¡ª¡ª¼´HTTPFactories£¨HTTP¹¤³§±ê×¼£©ÒýÁì×ÅWeb¿ª·¢½øÈëÁËÒ»¸öȫеĽ׶Ρ£
ʲôÊÇPSR-17£¿¼òÆÓÀ´Ëµ£¬Ëü½ç˵ÁËÔÚPHPÖн¨Éè¡¢²Ù×÷HTTPÐÂÎÅ£¨°üÀ¨ÇëÇóºÍÏìÓ¦£©µÄ¹¤³§½Ó¿Ú¡£ÕâÒâζ×Å£¬ÎÞÂÛÄãʹÓÃÄĸö¿ò¼Ü»ò¿â£¬Ö»Òª×ñÕÕÕâÒ»±ê×¼£¬¿ª·¢³öÀ´µÄ´úÂë¾ÍÄÜÔÚ²î±ðÇéÐμäÎÞ·ìÇл»£¬´ó´ó½µµÍÁ˼æÈݱ¾Ç®¡£Õâ¸ö±ê×¼µÄ·ºÆð£¬ÊÇΪÏàʶ¾öÒÔǰÔÚʹÓÃHTTPÐÂÎÅʱ±£´æµÄ¶àÑù»¯¡¢Ë鯬»¯ÎÊÌâ¡£
¸÷È˶¼ÖªµÀ£¬HTTPÇëÇóºÍÏìÓ¦µÄ¹¹½¨ÔÚÖÖÖÖ¿ò¼ÜºÍ¿âÖÐÍùÍù·×ÆçÑù£¬µ¼ÖÂǨáã¡¢ÕûºÏºÍ²âÊÔ±äµÃÖØ´ó·±Ëö¡£¶øPSR-17ͨ¹ýÌṩһÌ×ͳһµÄ¹¤³§½Ó¿Ú£¬Í³Ò»ÁËHTTPÐÂÎŵĽ¨ÉèÁ÷³Ì¡£
ΪʲôÕâ¸ö±ê×¼ÔÆÔÆÖ÷Òª£¿Ôµ¹ÊÔÓÉÐí¶à£¬µ«×î½¹µãµÄ£¬ÊÇËü´øÀ´ÁËÆ½Ì¨ºÍ¿ò¼ÜÖ®¼äµÄÇÅÁº×÷Óá£ÏëÏóһϣ¬ÈôÊÇÄ㿪·¢Ò»¸öRESTAPIЧÀÍ£¬¿ÉÄÜ»áÒÀÀµ²î±ðµÄ¿âÀ´´¦Öóͷ£ÇëÇó¡¢ÏìÓ¦£¬ÉõÖÁÔÚ²î±ðµÄÏîÄ¿ÖÐÇл»¿ò¼Ü¡£¶øÓÐÁËPSR-17£¬ËùÓÐÕâЩ¿â¶¼¿ÉÒÔ½ÓÄɱê×¼µÄ¹¤³§½Ó¿ÚÀ´½¨ÉèHTTP¹¤¾ß£¬Ê¹µÃÕû¸öϵͳ±äµÃÔ½·¢Ä£¿é»¯¡¢¿É×éºÏ¡£
Õâ²»µ«¼ÓËÙÁË¿ª·¢Á÷³Ì£¬Ò²ÈòâÊÔ¡¢Éý¼¶¡¢Î¬»¤±äµÃ¸ü¼òÆÓ¡¢¸ü¸ßЧ¡£
³ýÁËÌá¸ß¼æÈÝÐÔ£¬PSR-17»¹ÃãÀø¿ª·¢ÕßÉè¼Æ¸üΪÎÞаµÄ´úÂë½á¹¹¡£Ëü½ç˵Á˶àÖÖ¹¤³§½Ó¿Ú£¬ºÃ±È½¨ÉèÇëÇó¡¢ÏìÓ¦¡¢URI¡¢Í·ÐÅÏ¢µÈµÄ¹¤³§ÒªÁ죬¶øÕâЩ¶¼¿ÉÒÔͨ¹ýÒÀÀµ×¢ÈëÎÞаÉèÖá£Ðí¶à¿ò¼ÜÒѾ×îÏÈÖ§³Ö»òÖð²½½ÓÄÉÕâÒ»±ê×¼£¬Î´À´£¬ÕÆÎÕPSR-17£¬²»µ«ÄÜÈÃÄãÔÚÐÐÒµÄÚ¼á³Ö¾ºÕùÁ¦£¬»¹ÄÜÔÚÄãµÄÏîÄ¿ÖÐʵÏָ߶ȵÄÁýͳϢÕùñî¡£
ºÃ±ÈÔÚ΢ЧÀͼܹ¹ÖУ¬²î±ðЧÀÍÖ®¼äƵÈÔת´ïHTTPÐÂÎÅ£¬×ñÕÕÕâ¸ö±ê×¼»áÈÃʵÏּƻ®Ô½·¢Í³Ò»¡¢¾«Á·¡£
ËäÈ»£¬PSR-17Ò²²¢·ÇÁæØê±£´æ£¬ËüºÍÆäËüÏà¹Ø±ê×¼ÈçPSR-7£¨HTTPÐÂÎŽӿڣ©ÅäºÏ×é³ÉÁËPHPµÄHTTPÐÂÎÅÉú̬¡£»»¾ä»°Ëµ£¬PSR-17Ö÷ÒªÈÏÕæ¡°½¨É衱HTTPÐÂÎÅ£¬¶øPSR-7Ôò½ç˵ÁËÕâЩÐÂÎŵġ°ÄÚÈݺͲÙ×÷¡±¡£¶þÕßÏศÏà³É£¬ÐγÉÁËÍêÕûµÄ½â¾ö¼Æ»®£¬´ÓÐÂÎŵġ°ÖÆÔ족µ½¡°´¦Öóͷ£¡±£¬Ã¿Ò»²½¶¼±»±ê×¼»¯¡£
ÕâÑùÒ»À´£¬¿ª·¢Õß¿ÉÒÔרעÓÚÓªÒµÂß¼£¬ÎÞÐèµ£ÐĵײãµÄÐÂÎÅʵÏÖϸ½Ú¡£
PSR-17µÄ·ºÆð£¬²»µ«ÌáÉýÁËPHPÔÚHTTPͨѶ·½ÃæµÄµ×²ã±ê×¼»¯Ë®Æ½£¬¸üΪδÀ´Web¿ª·¢ÌṩÁËǿʢµÄ»ù´¡ÉèÊ©¡£ÎÞÂÛÊǹ¹½¨¸ßÐÔÄܵÄAPI¡¢Î¢Ð§ÀÍ£¬ÕվɾÙÐÐϵͳµÄÉý¼¶Ç¨áã£¬ÕÆÎÕÕâ¸ö±ê×¼¶¼ÄÜ´øÀ´ÏÔÖøµÄÓÅÊÆ¡£Ëæ×ÅÔ½À´Ô½¶àµÄ¿ªÔ´ÏîÄ¿ºÍ¿ò¼ÜÖ§³ÖPSR-17£¬ÌáǰÃ÷È·²¢Ó¦ÓÃÕâÒ»±ê×¼£¬½«»áÈÃÄãµÄ¿ª·¢Ö®Â·¸ü˳³©¡¢¸ü¸ßЧ¡£
ÉîÈëÏàʶPSR-17µÄ½¹µã½Ó¿ÚÓëʵÏÖ·½·¨£¬²»µ«¿ÉÒÔ°ïÄãд³ö¸üÇкÏÐÐÒµ¹æ·¶µÄ´úÂ룬ҲÄÜΪÄãµÄÏîÄ¿´øÀ´¾ÃÔ¶µÄÊÕÒæ¡£±ê×¼µÄʵÖÊ£¬ÊÇΪÁ˽µµÍ¸÷ÈËÔÚ²î±ð×é¼þÖ®¼äµÄ¼¯³ÉÄѶȣ¬Ê¹µÃ´úÂë±äµÃ¸ü¾ß»¥²Ù×÷ÐԺͿÉά»¤ÐÔ¡£ÎÒÃǽ«Ïêϸ²ð½âPSR-17ÖеÄÒªº¦½Ó¿Ú£¬Ì½ÌÖËüÃǵÄÉè¼ÆÍ·ÄÔºÍÏÖʵӦÓó¡¾°¡£
PSR-17½ç˵Á˼¸¸ö½¹µã¹¤³§½Ó¿Ú£¬×îÖ÷ÒªµÄ°üÀ¨£º
ServerRequestFactoryInterface£ºÓÃÓÚ½¨ÉèЧÀÍÆ÷ÇëÇ󹤾ߣ»RequestFactoryInterface£ºÓÃÓÚ½¨ÉèÇëÇ󹤾ߣ»ResponseFactoryInterface£ºÓÃÓÚ½¨ÉèÏìÓ¦¹¤¾ß£»StreamFactoryInterface£ºÓÃÓÚ½¨ÉèÁ÷¹¤¾ß£»UploadedFileFactoryInterface£ºÓÃÓÚ½¨ÉèÉÏ´«µÄÎļþ¹¤¾ß£»UriFactoryInterface£ºÓÃÓÚ½¨ÉèURI¹¤¾ß¡£
ÕâЩ½Ó¿ÚµÄÅäºÏÄ¿µÄ£¬ÊÇÌṩһÌ×ͳһµÄÁ÷³Ì£¬ÓÃÀ´ÌìÉúHTTPÏà¹ØµÄÖÖÖÖ¹¤¾ß¡£ºÃ±È£¬RequestFactoryInterface»áÌṩһ¸öÒªÁìcreateRequest()£¬ÈÃÄã¿ÉÒÔÓòî±ðµÄ²ÎÊý¿ìËÙ¹¹½¨ÇëÇ󹤾ߣ¬ÎÞÐëµ£ÐÄÏêϸµÄʵÏÖϸ½Ú¡£ÕâÖÖ¡°½Ó¿Ú+¹¤³§¡±µÄÉè¼ÆÍ·ÄÔ£¬¼«´óµØÔöÇ¿ÁË´úÂëµÄÎÞаÐÔºÍÀ©Õ¹ÐÔ¡£
ÔÚʵÏÖ²ãÃæ£¬´ó²¿·Ö³ÉÊìµÄPHP¿âÒÑÖ§³ÖÕâЩ½Ó¿Ú¡£ºÃ±È£¬ZendDiactoros¡¢NyholmPSR-7ʵÏÖ¶¼ÌṩÁ˸÷×ԵŤ³§À࣬ÇкÏPSR-17±ê×¼¡£¿ª·¢Õß¿ÉÒÔÑ¡Ôñ×Ô¼ºÏ°¹ßµÄʵÏÖ£¬ÉõÖÁ×Ô½ç˵¹¤³§£¬Ö»ÒªÖª×ã½Ó¿Ú½ç˵¾ÍÐС£ÕâÖÖ×ÔÓɶȣ¬Îª²î±ðÏîÄ¿µÄÌØÊâÐèÇ󷿪Á˿ռ䣬¸üÀû±ãºóÆÚµÄ²âÊÔ»òÄ£Äâ¡£
ÏêϸӦÓÃʾÀý£º¼ÙÉèÄãÔÚ¿ª·¢Ò»¸öAPIЧÀÍ£¬ÄãÐèÒªÔÚ´¦Öóͷ£ÇëÇóʱÌìÉúÏìÓ¦¹¤¾ß£¬»òÕßÔÚÖÐÐļþÖÐÐÞ¸ÄÇëÇóµÄijЩ²¿·Ö¡£Ê¹ÓÃÇкÏPSR-17µÄ¹¤³§£¬Äã¿ÉÒÔÏñÕâÑù²Ù×÷£º
$factory=newNyholm\Psr7\Factory\Psr17Factory();//PSR-17±ê×¼¹¤³§$request=$factory->createRequest('GET','https://api.example.com/data');$response=$factory->createResponse(200);
ÕâÑù£¬ÎÞÂ۵ײãʵÏÖÔõÑù±ä»»£¬Ö»ÒªÇкϽӿڣ¬´úÂë¶¼¿ÉÒÔÎȹÌÔËÐУ¬´Ó¶øÊµÏÖÕæÕýµÄ½âñî¡£
PSR-17²»Ö¹ÓÃÓÚͨË×ÇëÇó/ÏìÓ¦µÄ½¨Éè¡£ÔÚ¹¹½¨ÖØ´óµÄÖÐÐļþ»ò²âÊÔÇéÐÎʱ£¬ÕâÒ»±ê×¼±äµÃÓÈΪÖ÷Òª¡£ºÃ±È£¬Ä£ÄâÇëÇóʾÀý£º
//½¨ÉèÒ»¸öÄ£ÄâÇëÇó£¬ÓÃÓÚ²âÊÔ$mockRequest=$factory->createRequest('POST','/submit')->withHeader('Content-Type','application/json')->withBody($bodyStream);
ÕâÑùÒ»À´£¬²âÊÔÓÃÀý±äµÃ¼òÆÓÖ±¹Û¡£Ôٺñȣ¬ÎªÁËʵÏÖ¶à°æ±¾µÄAPI¼æÈÝ£¬Äã¿ÉÒÔÔÚ²î±ðÇéÐÎÖÐÇл»²î±ðµÄ¹¤³§ÊµÏÖ£¬²»ÐèÒªÐÞ¸ÄÓªÒµÂß¼¡£
Ö÷ÒªµÄÊÇ£¬ÒªÃ÷È·PSR-17µÄÉè¼ÆÀíÄîÊÇ¡°½Ó¿ÚÓÅÏÈ¡±¡ªËü½ç˵ÁËÃ÷È·µÄ×óȯ£¬µ«Ã»Óаó¶¨ÏêϸµÄʵÏÖ¡£ÔÆÔÆÒ»À´£¬ÈκÎÖ§³ÖPSR-17µÄ¿â¶¼¿ÉÒÔÎÞ·ìÁ¬Ïµ¡£Õâ²»µ«¼ò»¯ÁË¿ò¼ÜÓë¿âÖ®¼äµÄÏàÖú£¬¸üΪδÀ´µÄ¿ª·¢Ä£Ê½ÆÌƽÁËõè¾¶¡£ºÃ±È£¬Ëæ×ÅÔÆÔÉú¡¢ÈÝÆ÷»¯µÄÉú³¤£¬±ê×¼»¯µÄAPI½¨É蹤³§ÈÃ΢ЧÀÍÖ®¼äµÄͨѶ±äµÃÏñÆ´²å»ýľһÑù±ãµ±¡£
¼ÌÐøÍÆ½øÕâ¸öÀíÄһЩ¾µäµÄ¿ò¼ÜÈçLaravel¡¢SymfonyÒ²ÔÚÖð²½ÒýÈëPSR-17½Ó¿Ú£¬ÒÔÔöÇ¿À©Õ¹ÐԺͻ¥²Ù×÷ÐÔ¡£×÷Ϊ¿ª·¢Õߣ¬³ýÁËÕÆÎչŰåµÄÇëÇóÏìÓ¦´¦Öóͷ££¬¸üÓ¦µ±¹Ø×¢±ê×¼½Ó¿ÚµÄʹÓ㬰ÑËü×÷Ϊ¹¹½¨¸ßÆ·ÖÊ¡¢¿ÉÀ©Õ¹PHPÓ¦ÓõĻùʯ¡£
δÀ´Ç÷ÊÆÏÔȻָÏò¸ü±ê×¼»¯¡¢¸üÄ£¿é»¯µÄWeb¿ª·¢¼Ü¹¹¡£ÕÆÎÕPSR-17£¬²»µ«Òâζ×ÅÄãÕ¾ÔÚÁËÊÖÒÕµÄÇ°ÑØ£¬¸üÒâζ×ÅÄãÄÜÔÚһֱת±äµÄÊÖÒÕÇéÐÎÖÐÇáËÉÓ¦¶ÔÖÖÖÖÌôÕ½¡£ÎÞÂÛÊÇÖØ´óµÄAPI¼¯³É£¬ÕÕ¾É΢ЧÀ͵ÄÄ£¿é»¯°²ÅÅ£¬HTTP¹¤³§µÄ±ê×¼»áΪÄãÌṩ¼áʵµÄ»ù´¡¡£¾ÍÏñÒ»¿é¸ßÆ·ÖÊµÄÆ´Í¼£¬ÕâЩ±ê×¼Õýһֱƴ½Ó³öPHPµÄδÀ´»¾í¡£
×ܽ᣺´ÓÏàʶ½¹µã½Ó¿Ú£¬µ½ÏÖʵӦÓó¡¾°£¬ÔÙµ½Î´À´Éú³¤Æ«Ïò£¬PSR-17¶¼Õ¹ÏÖ³öÁËÆäÔÚPHPÉú̬ÖеÄÖ÷Òª¼ÛÖµ¡£ÈÃÎÒÃÇÅäºÏÆÚ´ý£¬ÕâÒ»±ê×¼ÄÜÏòµ¼PHP¿ª·¢ÕßÒ»ÆðÂõÏòÔ½·¢¸ßЧ¡¢Í³Ò»¡¢¿Éά»¤µÄWeb¿ª·¢ÐÂʱ´ú°É¡£