728x90
이번 시간에는 요청을 하는 url이 일치하지 않는 경우에 대한 처리, request로 들어온 정보에 따라 url를 변경하여 요청하는 방식에 대해 배워보고자 합니다.
없는 url로 요청
백엔드에 정의되지 않은 url로 요청시, 해당 주소를 찾을 수 없습니다. Not Found
를 출력하도록 하기 위해서는, Router
에 fallback
함수를 추가해주면 됩니다.
다음과 같이 message가 정의된 struct 구조체를 선언해주고, fallback() 함수에 IntoResponse
를 상속받아서 BAD_REQUEST
를 출력하도록 진행하면 됩니다.
use axum::response::IntoResponse;
#[derive(Serialize)]
struct ErrorResponse {
message: &'static str,
}
async fn fallback() -> impl IntoResponse {
(
StatusCode::BAD_REQUEST,
Json(ErrorResponse {
message: "Not Found",
}),
)
}
해당 함수를 각 router 함수들이 포함되어 있는 get_routes()
에 추가해주면 됩니다.
ub fn get_routes() -> Router {
Router::new()
.merge(user_routes())
.merge(guild_route())
.merge(notice_route())
.merge(union_route())
.merge(ranking_route())
.fallback(fallback)
}
동일한 request 방식 통합
maple open api request 방식을 보면, 'https://open.api.nexon.com/maplestory/v1/
다음 공통 url로 시작하고, 이후에는 각각 character, notice 등등 종류별 명칭들로 시작합니다.
그리고, header에 x-nxopen-api-key:{api-key}
방식으로 요청을 보냅니다.
그렇게 받아온 response를 받아오고, 이를 각각 함수들에 반환하여, json 값을 각 함수별 선언된 struct별로 받아서 출려해주면 됩니다.
pub async fn request_parser(api_key: Arc<API>, kind: &str, user_ocid: &str) -> reqwest::Response {
// 요청 헤더 정의
let mut headers = header::HeaderMap::new();
headers.insert("x-nxopen-api-key", api_key.key.parse().unwrap());
let url = format!(
"https://open.api.nexon.com/maplestory/v1/character/{}?ocid={}",
kind, user_ocid
);
// POST 요청 보내기
let response = Client::new()
.get(url)
.headers(headers)
.send()
.await
.expect("Failed to send request");
return response;
}
728x90
'Rust > 프로젝트' 카테고리의 다른 글
Rust로 백엔드 개발기(feat. 메이플스토리) - 09 Main 함수 정리 (0) | 2025.04.02 |
---|---|
Rust로 백엔드 개발기(feat. 메이플스토리) - 08 사용자별 요청 처리 (0) | 2025.03.31 |
Rust로 백엔드 개발기(feat. 메이플스토리) - 07 Null 제외하는 방법 (0) | 2025.03.31 |
Rust로 백엔드 개발기(feat. 메이플스토리) - 06 프로젝트 분리 (0) | 2025.03.26 |
Rust로 백엔드 개발기(feat. 메이플스토리) - 05 전역변수 (0) | 2025.03.23 |
댓글