CakePHP4.0.4 표준에 추가된 BodyParer Middleware는 WebAPI 응용 프로그램을 쓰기 쉽게 만듭니다
9707 단어 PHPmiddlewareCakePHPtech
BodyParerMiddleware란
CakePHP의 Cookbook(참조)에는 다음과 같습니다.
cf. 미들웨어 - CkePHP 4.x Strawberry Cookbook
응용 프로그램이 JSON, XML 또는 다른 인코딩된 요청 주체를 받아들일 때
BodyParserMiddleware
을 사용하면 이 요청을 그룹별로 디코딩하여 $request->getParsedData()
와 $request->getData()
에서 사용할 수 있다.기본적으로 json 기체만 세척하지만, 선택에서 XML 세척을 사용할 수 있습니다.자체 서버를 정의할 수도 있습니다.중요한 것은
Content-Type: application/json
와 Content-Type: application/xml
에서 점파될 때 중간부품은 점파 주체를 신속하게 제거할 수 있다.CakePHP 3.6.0에
class Cake\Http\Middleware\BodyParserMiddleware
를, 케이크PHP의 애플리케이션 템플릿cakephp/app에 4.0.4 추가을 추가했다.CakePHP4가 되면 기본적으로 사용됩니다.뭐가 편해요?
CakePHP3에 웹API 앱을 쓸 때는
Content-Type: application/json
에서Hash가 요청을 받을 때의 요청 주체를 위해 아래와 같이 하나씩json_decode()
물어야 한다.일부 팟캐스트 주체를 원하더라도 먼저 팟캐스트 주체의 전체 내용을 받아들인 다음에 부분을 방문해야 한다는 느낌은 편리성이 부족하다.
ArticleController.php
<?php
namespace App\Controller;
// 中略
class ArticleController extends AppController
{
public function edit(string $id)
{
$postData = $this->getRequest()->input('json_decode', true);
$title = $postData['title'];
// 以下略
Content-Type: application/x-www-form-urlencoded
또는 Content-Type: multipart/form-data
의 POST 요청$_POST
에 값이 포함된 경우 $this->getRequest()->getData()
에서 얻을 수 있습니다.그런데 지금
application/json
나 application/xml
에서 갑자기 하고 싶잖아~🥺(또는 JavaScript/TypeScript에서 HTTP 클라이언트로 자주 사용axios기본값
Content-Type: application/x-www-form-urlencoded
입니다.으음...)그걸 해결할 수 있는 건
BodyParserMiddleware
.$type = 'application/json'
이러한 Content-Type 문자열은 정의되고 각 Content-Type에 따라 해당하는 $parser
클론으로 처리됩니다.뜨거워!BodyParserMiddleware.php
public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
{
// 中略
$parser = $this->parsers[$type];
$result = $parser($request->getBody()->getContents());
if (!is_array($result)) {
throw new BadRequestException();
}
$request = $request->withParsedBody($result);
// 以下略
또한 BodyParserMiddleware
에서 처리된 요청 주체는 사소한 의식$this->getRequest()->getData()
이 얻지 못하도록 요청 정보에 저장되었다.뜨거워!!ArticleController.php
<?php
namespace App\Controller;
// 中略
class ArticleController extends AppController
{
public function edit(string $id)
{
$title = $this->getRequest()->getData('title');
// 以下略
끝말
따라서 CakePHP4에 웹API 앱을 쓸 때 좀 더 원활하게 쓰기 위한 작업
BodyParserMiddleware
을 소개했다.이것으로 당신만의 최강의 웹API 앱을 만들어 보세요!!!
참고 자료
Reference
이 문제에 관하여(CakePHP4.0.4 표준에 추가된 BodyParer Middleware는 WebAPI 응용 프로그램을 쓰기 쉽게 만듭니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/takoba/articles/d73b1378517ea3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)