Django, Node.js, Flask, FastAPI, Express 등등, 스크립팅 언어의 프레임워크를 쓸 때는 API endpoint path의 순서를 조심해야한다. 나같은 경우엔 React와 Django에서 이 순서를 조심하다가 FastAPI에서 이 순서를 간과하여 굉장한 삽질을 해버렸다. 알고보니 대부분의 스크립팅 언어 프레임워크는 리퀘스트가 들어오면 내가 정의한 코드의 순서대로 경로를 매칭한다는 것이다. 즉, 광범위한 path를 코드 제일 위에 위치시키면 그것만 매칭해버린다는 것이다. 아래의 API 코드를 보자. @app.route('/users') def get_users(): ... @app.route('/users/') def get_user(user_id): ... 이 경우엔 /use..
발단 모델을 수정하고 Alembic의 revision을 생성하려고 하는 커맨드를 입력하는 도중, env.py 에서 내 프로젝트의 app 모듈을 찾지 못 하는 ModuleNotFoundError 에러가 떴다. 원인 어떠한 이유에서 Alembic은 커맨드를 실행할 때, local "." 경로를 sys.path에 추가하지 않는데 그래서 프로젝트의 모듈을 못 찾는 것 같다. 해결 alembic.ini로 가서 아래 코드의 주석을 해제해주어 local "." 경로를 sys.path에 추가하자. (주석되어있음) prepend_sys_path = . stack overflow :alembic-modulenotfounderror-in-env-py alembic github :해당 에러에 대한 커밋
post나 put처럼 delete를 사용하는데 안돼서 당황할 때가 있다. 혹시 delete를 호출할 때 두번째 인자에 body를 넣고있지않은가? Axios는 RESTful API 방식을 지키기 위해서 delete메소드에 절대 바디를 담지않으려는 친구였다. (RESTful이 궁금하다면 찾아보자) 즉, POST나 PUT처럼 두번째 인자에 body를 담지않는다! 그래서 두 번쨰 인자로는 data option을 인자로 넣어줘야 바디로 얹혀진다. const res = await axios.delete('https://here/is/path/for/delete', { data : { id : 1} });