FastAPI header underbar 설정
Fest API Header 매개변수의 underBar
서버측에서 제공한 docs를 살펴보면, jwt token 값을 담는 매개변수의 이름은 underbar로 다음과 같이 설정이 되어있습니다.
{
"_user_token": "token"
}이를 반영하기 위해 저 또한 token을 전달하는 header 매개 변수를 아래와 같이 설정했습니다.
async function getApiWhitToken<T>(method: ValueOf<Method>, jwt: string) {
try {
const data = await instance.get<T>(`${method}`, {
headers: {
_user_token: jwt,
},
});
return data.data;
} catch (e) {
console.log(e);
}
}하지만 다음과 같이 jwt 토큰을 전달한 경우 서버에서 다음과 같은 에러가 발생했습니다.
File "C:\Users\name\Desktop\Github\mbtmi\server\venv\Lib\site-packages\sqlalchemy\engine\result.py", line 760, in _only_one_row
raise exc.NoResultFound(
sqlalchemy.exc.NoResultFound: No row was found when one was required제가 전달한 토큰 값이 db에서 찾을 수 없다는 에러가 발생하고 있습니다. 이는 표준 헤더 이름과 연관이 있는 문제였습니다. 대부분의 표준 헤더는 흔히 **“마이너스 기호”**라고 불리는 - , “하이픈” 문자로 구분이 됩니다. 하지만 파이썬에서 -user-token과 같은 변수는 유효하지 않습니다. 따라서 festAPI에서는 Header 매개변수 이름을 자동으로 underscores로 변환하는 기능을 제공하고 있습니다. 따라서 제가 Header 값을 underscore를 사용할 필요 없이 하이픈을 사용하여 전달을 하면 해결이 되는 문제였습니다. 그러면 festAPI에서 자동으로 이를 underscore로 변환하여 활용을 하였습니다.
async function getApiWhitToken<T>(method: ValueOf<Method>, jwt: string) {
try {
const data = await instance.get<T>(`${method}`, {
headers: {
'-user-token': jwt,
},
});
return data.data;
} catch (e) {
console.log(e);
}
}위와 같이 header 매개변수를 전달했을 때, 문제 없이 정상적으로 서버와 소통을 했습니다.
Reference
Content Table
- Fest API Header 매개변수의 underBar
- Reference
Mbtmi
2023.11.26
11 / 12