많은 PHP 응용 프로그램에서 특히 API 인터페이스, 웹 응용 프로그램 또는 모바일 장치와 상호 작용할 때 클라이언트 버전 정보를 처리해야합니다. 클라이언트 버전 번호는 매우 중요합니다. 일반적으로 요청 헤더, URL 매개 변수 또는 쿠키에서 얻을 수있는 클라이언트 버전 정보를 얻는 방법에는 여러 가지가 있습니다. 그러나 어쨌든 get_client_version 함수의 논리적 구현은 종종 여러 장소에서 사용해야합니다. 따라서 코드의 재사용 성, 유지 관리 및 명확성을 향상시키기 위해 미들웨어를 통해 이러한 논리를 균일하게 처리 할 수 있습니다.
Middleware는 요청이 응용 프로그램에 들어가기 전에 또는 응답이 클라이언트에게 전송되기 전에 실행되는 기능 모듈을 나타냅니다. 일반적으로 PHP에서 검증, 로깅, 요청 처리, 권한 점검 등과 같은 몇 가지 일반적인 작업을 수행하는 데 사용됩니다. 특히 Laravel, Symfony, Middleware와 같은 프레임 워크를 사용할 때는 매우 중요한 개념으로 일부 반복적 인 작업에 집중할 수 있습니다.
HTTP 요청에서 클라이언트 버전 정보를 얻는 데 사용되는 get_client_version 함수가 있다고 가정하면이 기능은 여러 곳에서 사용될 수 있습니다. 매번 동일한 논리를 반복해야한다면, 건조 (스스로 반복하지 마십시오) 원리를 준수하지 않습니다. 미들웨어를 통해이 로직을 공통 처리 흐름으로 캡슐화하여 각 컨트롤러 또는 경로에서 반복 구현을 피할 수 있습니다.
우리는 단계별로 미들웨어를 사용하여 PHP에서 get_client_version 함수의 논리를 균일하게 처리하는 방법을 소개합니다.
먼저 PHP 응용 프로그램에서 미들웨어 클래스를 만들어야합니다. 이 미들웨어는 클라이언트 버전 정보를 얻을 책임이 있습니다.
Laravel 프레임 워크를 사용하고 있다고 가정하면 미들웨어를 생성하기위한 명령은 다음과 같습니다.
php artisan make:middleware ClientVersionMiddleware
app/http/middleware/clenderversionmiddleware.php 파일에서 클라이언트 버전을 얻기 위해 논리를 작성합니다. 예를 들어, 클라이언트 버전은 요청 된 헤더 에 있거나 get 매개 변수를 통과 할 수 있습니다. 실제 요구에 따라 처리 할 수 있습니다.
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class ClientVersionMiddleware
{
public function handle(Request $request, Closure $next)
{
// 클라이언트 버전이 요청 헤더에 있다고 가정합니다.
$clientVersion = $request->header('Client-Version');
// 요청 헤더에 버전 정보가없는 경우,할 수 있다URL매개 변수를 얻습니다
if (!$clientVersion) {
$clientVersion = $request->query('client_version');
}
// 버전 정보가 아직 찾을 수없는 경우,기본 버전을 사용할 수 있습니다
if (!$clientVersion) {
$clientVersion = '1.0.0'; // 기본 버전 번호
}
// 요청에 버전 정보를 저장합니다,후속 사용
$request->attributes->set('client_version', $clientVersion);
// 요청을 계속 처리하십시오
return $next($request);
}
}
위의 코드에서는 먼저 요청 헤더에서 클라이언트 버전 필드의 값을 얻으려고 노력하며, 찾을 수없는 경우 URL 매개 변수 client_version 에서 가져옵니다. 아직 찾을 수없는 경우 기본 버전 번호를 설정할 수 있습니다.
다음 으로이 미들웨어를 응용 프로그램에 등록해야합니다. Laravel에서는 앱/http/kernel.php 파일에 미들웨어를 등록 할 수 있습니다.
protected $routeMiddleware = [
// 다른 미들웨어...
'client_version' => \App\Http\Middleware\ClientVersionMiddleware::class,
];
이제 경로 나 컨트롤러 에서이 미들웨어를 사용할 수 있습니다. 예를 들어, 라우팅에 사용될 때 다음을 작성할 수 있습니다.
Route::get('/some-endpoint', function (Request $request) {
$clientVersion = $request->get('client_version');
return response()->json(['client_version' => $clientVersion]);
})->middleware('client_version');
이 예에서는 Client_Version Middleware를 사용하고 경로에서 Client_version 의 값을 얻습니다. 클라이언트가 요청에 버전 정보를 제공하면 미들웨어를 통해 경로로 전달됩니다.
미들웨어를 구현하고 경로에 적용한 후 다른 요청으로 버전 번호의 획득을 테스트 할 수 있습니다. 예를 들어 다음 방법으로 테스트 할 수 있습니다.
클라이언트 버전 필드가있는 헤더를 요청하십시오
client_version 매개 변수로 URL을 요청하십시오
버전 정보가 제공되지 않을 때는 기본값을 사용하십시오
미들웨어를 통해 get_client_version 함수의 논리를 균일하게 처리 할 수 있으며, 코드의 유지 관리 및 재사용 성을 크게 향상시킬 수 있습니다. 미들웨어에서 버전을 한 번 가져 오려면 논리를 작성한 다음 버전 정보를 미들웨어를 통해 응용 프로그램의 모든 요청에 전달하면됩니다. 이 접근법은 코드를 단순화 할뿐만 아니라 버전 관리를보다 중앙 집중화하고 일관성있게 만듭니다.