소프트웨어 개발자/좋은 API, DB 설계하기

[좋은 API 설계하기] Query Parameter (쿼리파라미터)

yubi5050 2024. 1. 30. 15:10

1. 쿼리 파라미터 값 - 문자 vs 숫자

1) 문자 일 경우

  • ex) ?filter=inprogress
  • endpoint url은 애초에 드러나는 것이므로 보다 직관적
  • 숫자 방식에 비해 임의로 데이터를 찔러보기 어려움 (해석이 비교적 어려움)

 

2) 숫자 일 경우

  • ex) ?filter=1
  • 문자 방식에 비해 임의로 데이터를 찔러보기 쉬움 (해석이 쉬움)

결론 : 1을 조금 더 선호

 

 

2. 쿼리 파라미터 값 - 한글 문자 vs 영어 문자

1) 한글 문자

  • ex) ?filter=진행중
  • 해당 '진행중'을 URL에 포함하여 요청시 변환 과정을 거침
  • 변환 과정 :
    • Unicode의 값 (ex. U+C21C)을 찾음
    • UTF-8 인코딩 (ex. 11100011, 10001000, 1011000 - 무조건 3바이트) 으로 변환
    • 최종 % 기호 뒤 두 자리의 16진수로 표현됨
  • 어쨌든 변환이 한 번 거쳐진채, 동작되게 됨. 어디선가는 남은 기록으로 길을 잃을지도

 

2) 영어 문자

  • ex) ?filter=inprogress
  • 영어로 설계하는 것이 조금 더 보편적
  • 굳이 변환 과정이 필요 없음

 

결론

  • DB의 값 저장 방식이 한글 이거나 영어 인지
  • QueryString ~ ServerEnum ~ DB 값 조회 까지 중간에 {'한글':'영어'}에 대한 교환 쌍 굳이 필요 할지?
  • 어차피 FE는 내려온 값을 한번 가공 해야 하기에 (DB에서 굳이 한글로 할 필요는 없음)
  • 한글 사용시 로그의 어디선가 16진수로 변환된 값 때문에 가독성이 떨어 질 수 있음
  • 영문이 조금 더 낫다고 생각 하지만 {'한글':'영어'} 교환 쌍 등이 있으면 가능은 하다.