API 형태로 개발을 진행 할 때, 클라이언트와의 협업 중 중요한 부분인 response 값 관리에 대한 정리 내용 입니다.
기능이 나온지는 오래 되었지만.. 개인적으로 업무 하는 것들도 많고 공부를 안 한지가 오래 되어서 정리 차 적어 봅니다.
Laravel 내에서의 HTTP CODE값
굉장히 예전부터 Laravel을 사용하던 저는 따로 HTTP CODE값을 정의해 두고 사용하고 있었는데 이번에 개인 프로젝트를 진행하면서 공부겸 공식 문서를 몇가지 살펴보다가 HTTP CODE값이 현재 laravel 버전에서는 이미 정의 되어 있단는 걸 이제야 알았습니다 ㅠ_ㅠ..
Vender/sysfony/http-foundation/Response.php 내에서 정의된 값들을 확인 할 수 있습니다.
public const HTTP_CONTINUE = 100;
public const HTTP_SWITCHING_PROTOCOLS = 101;
public const HTTP_PROCESSING = 102; // RFC2518
public const HTTP_EARLY_HINTS = 103; // RFC8297
public const HTTP_OK = 200;
public const HTTP_CREATED = 201;
public const HTTP_ACCEPTED = 202;
public const HTTP_NON_AUTHORITATIVE_INFORMATION = 203;
public const HTTP_NO_CONTENT = 204;
public const HTTP_RESET_CONTENT = 205;
public const HTTP_PARTIAL_CONTENT = 206;
public const HTTP_MULTI_STATUS = 207; // RFC4918
public const HTTP_ALREADY_REPORTED = 208; // RFC5842
public const HTTP_IM_USED = 226; // RFC3229
public const HTTP_MULTIPLE_CHOICES = 300;
public const HTTP_MOVED_PERMANENTLY = 301;
public const HTTP_FOUND = 302;
public const HTTP_SEE_OTHER = 303;
public const HTTP_NOT_MODIFIED = 304;
public const HTTP_USE_PROXY = 305;
public const HTTP_RESERVED = 306;
public const HTTP_TEMPORARY_REDIRECT = 307;
public const HTTP_PERMANENTLY_REDIRECT = 308; // RFC7238
public const HTTP_BAD_REQUEST = 400;
public const HTTP_UNAUTHORIZED = 401;
public const HTTP_PAYMENT_REQUIRED = 402;
public const HTTP_FORBIDDEN = 403;
public const HTTP_NOT_FOUND = 404;
public const HTTP_METHOD_NOT_ALLOWED = 405;
public const HTTP_NOT_ACCEPTABLE = 406;
public const HTTP_PROXY_AUTHENTICATION_REQUIRED = 407;
public const HTTP_REQUEST_TIMEOUT = 408;
public const HTTP_CONFLICT = 409;
public const HTTP_GONE = 410;
public const HTTP_LENGTH_REQUIRED = 411;
public const HTTP_PRECONDITION_FAILED = 412;
public const HTTP_REQUEST_ENTITY_TOO_LARGE = 413;
public const HTTP_REQUEST_URI_TOO_LONG = 414;
public const HTTP_UNSUPPORTED_MEDIA_TYPE = 415;
public const HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
public const HTTP_EXPECTATION_FAILED = 417;
public const HTTP_I_AM_A_TEAPOT = 418; // RFC2324
public const HTTP_MISDIRECTED_REQUEST = 421; // RFC7540
public const HTTP_UNPROCESSABLE_ENTITY = 422; // RFC4918
public const HTTP_LOCKED = 423; // RFC4918
public const HTTP_FAILED_DEPENDENCY = 424; // RFC4918
public const HTTP_TOO_EARLY = 425; // RFC-ietf-httpbis-replay-04
public const HTTP_UPGRADE_REQUIRED = 426; // RFC2817
public const HTTP_PRECONDITION_REQUIRED = 428; // RFC6585
public const HTTP_TOO_MANY_REQUESTS = 429; // RFC6585
public const HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; // RFC6585
public const HTTP_UNAVAILABLE_FOR_LEGAL_REASONS = 451; // RFC7725
public const HTTP_INTERNAL_SERVER_ERROR = 500;
public const HTTP_NOT_IMPLEMENTED = 501;
public const HTTP_BAD_GATEWAY = 502;
public const HTTP_SERVICE_UNAVAILABLE = 503;
public const HTTP_GATEWAY_TIMEOUT = 504;
public const HTTP_VERSION_NOT_SUPPORTED = 505;
public const HTTP_VARIANT_ALSO_NEGOTIATES_EXPERIMENTAL = 506; // RFC2295
public const HTTP_INSUFFICIENT_STORAGE = 507; // RFC4918
public const HTTP_LOOP_DETECTED = 508; // RFC5842
public const HTTP_NOT_EXTENDED = 510; // RFC2774
public const HTTP_NETWORK_AUTHENTICATION_REQUIRED = 511;
위 값들을 확인해 보시면 될 것 같습니다.
정의된 값 호출 방법은 아래와 같습니다.
use Illuminate\Http\Response;
Response::HTTP_NOT_FOUND
기본적인 response
일반적으로 return 쪽에 값만 반환하게 된다면 HTTP Return Code는 200으로 처리 됩니다.
하지만 200이 아니라 예외 처리로 빠져야 하는 경우들이 자주 있는데, 이럴 때 resopnse를 활용합니다.
function response($content = '', $status = 200, array $headers = [])
{
$factory = app(ResponseFactory::class);
if (func_num_args() === 0) {
return $factory;
}
return $factory->make($content, $status, $headers);
}
이런식으로 구현이 되어 있는 함수인데,
첫번째 매개변수로는 반환할 값, 두번째로는 상태 코드 값, 마지막 세번째는 반환 헤더값 입니다.
일반적으로는 컨트롤러 내부에서 아래와 같이 사용 합니다.
public function responseTest() {
return response('값',500);
}
response 매크로
자주 반환해야 하는 response 종류가 있다면 따로 지정을 해 둘 수 있습니다.
app\Providers\AppServiceProvider.php 쪽에서 반환값을 정의 합니다.
public function boot(): void
{
Response::macro('caps', function (string $value, int $status = 200) {
return Response::make(strtoupper($value), $status);
});
}
위와 같이 정의한다면 다음과 같이 사용 할 수 있습니다.
public function responseTest() {
return response()->caps('return test', Response::HTTP_INTERNAL_SERVER_ERROR);
}
실제 테스트 결과는 아래와 같습니다.
Status 값으로 500값이 반환되고, return test값이 대문자로 변환되면서 처리 된 것을 확인 할 수 있습니다.
'Programming' 카테고리의 다른 글
[Next.js] Next.js Store redux (0) | 2023.03.23 |
---|---|
[Next.js] next/image 외부 이미지 이용시 Error: Invalid src prop (0) | 2023.03.22 |
[AWS] ACM + Route53을 이용한 SSL(Https) 인증서 발급 (8) | 2022.05.04 |
laravel.log could not be opened in append mode: failed to o pen stream: Permission denied (0) | 2022.05.03 |
Laravel + Firebase 연동 및 앱 버전 관리 (0) | 2022.04.29 |