[http] REST GET API에 권장되는 날짜 형식

다음과 같은 REST GET API에 권장되는 타임 스탬프 형식은 무엇입니까?

http://api.example.com/start_date/{timestamp}

실제 날짜 형식은 YYYY-MM-DDThh:mm:ssZUTC 시간 과 같은 ISO 8601 형식이어야한다고 생각합니다 .

다음과 같이 하이픈과 콜론없이 ISO 8601 버전을 사용해야합니다.

http://api.example.com/start_date/YYYYMMDDThhmmssZ

또는 예를 들어 base64 인코딩을 사용하여 ISO 8601 형식을 인코딩해야합니까?



답변

REST에는 권장되는 날짜 형식이 없습니다. 실제로 최종 사용자와 시스템에 가장 적합한 것이 무엇인지로 귀결됩니다. 개인적으로 ISO 8601 (URL 인코딩)과 같은 표준을 고수하고 싶습니다.

추한 URI가 문제가되는 있지 않는 경우 (예 :의 URL 인코딩 된 버전을 포함하지 않는 :, -, 당신의 URI) 및 (인간) 주소 지정이 중요합니다, 당신은 또한 시대 시간 (예를 고려할 수 아니다 http://example.com/start/1331162374). URL이 약간 깔끔해 보이지만 확실히 가독성을 잃게됩니다.

/2012/03/07당신이 많이보고 다른 형식입니다. 내가 생각하는 것을 확장 할 수 있습니다. 이 경로로 이동하는 경우 항상 GMT 시간에 있는지 확인하거나 (문서에서 명확하게 확인) 일종의 시간대 표시기를 포함 할 수도 있습니다.

궁극적으로 이는 API와 최종 사용자에게 적합한 것으로 귀결됩니다. 당신의 API는 당신이 아니라 당신을 위해 작동해야합니다 ;-).


답변

이 기사에서 API 날짜 및 시간의 5 가지 법칙을 확인 하세요 .

  • 법칙 # 1 : 날짜에 ISO-8601 사용
  • 법칙 # 2 : 모든 시간대 허용
  • 법칙 # 3 : UTC로 저장
  • 법칙 # 4 : UTC로 반환
  • 법칙 # 5 : 시간이 필요하지 않으면 시간을 사용하지 마십시오

문서에 더 많은 정보가 있습니다.


답변

RFC6690 – 제약이 편안하고 환경 (코어) 링크 형식은 명시 적으로 그러나에 있어야 어떤 날짜 형식 상태하지 않는 섹션 2. 링크 형식 은이 날짜 유형이 추천 의미 RFC 3986. 가리키는 RFC 3986을 사용해야합니다.

기본적으로 인터넷상의 RFC 3339 날짜 및 시간은 다음과 같은 문서입니다.

그레고리력을 사용하여 날짜와 시간을 표현하기위한 ISO 8601 표준의 프로필 인 인터넷 프로토콜에서 사용할 날짜 및 시간 형식입니다.

요약 : YYYY-MM-ddTHH : mm : ss.ss ± hh : mm

(예 : 1937-01-01T12 : 00 : 27.87 + 00 : 20)

가장 안전한 내기입니다.


답변

입력 / 출력의 모든 datetime 필드는 UNIX / epoch 형식 이어야 합니다. 이렇게하면 API의 여러 측면에서 개발자 간의 혼동을 피할 수 있습니다.

장점 :

  • Epoch 형식에는 시간대가 없습니다.
  • Epoch에는 단일 형식이 있습니다 (Unix 시간은 단일 부호있는 숫자 임).
  • Epoch 시간은 일광 절약 시간에 영향을받지 않습니다.
  • 대부분의 백엔드 프레임 워크와 모든 기본 ios / android API는 epoch 변환을 지원합니다.
  • 현지 시간 변환 부분은 사용자 기기 / 브라우저의 시간대 설정에 따라 애플리케이션 측에서 전적으로 수행 할 수 있습니다.

단점 :

  • 데이터베이스에 UTC 형식으로 저장하기 위해 UTC로 변환하기위한 추가 처리.
  • 입력 / 출력의 가독성.
  • GET URL의 가독성.

노트:

  • 시간대는 프레젠테이션 레이어 문제입니다! 대부분의 코드는 시간대 나 현지 시간을 다루지 않아야하며 Unix 시간을 전달해야합니다.
  • 사람이 읽을 수있는 시간 (예 : 로그)을 저장하려면 Unix 시간 대신 Unix 시간과 함께 저장하는 것이 좋습니다.

답변

항상 UTC 사용 :

예를 들어 하나의 매개 변수 DATETIME을 사용하는 일정 구성 요소가 있습니다. GET 동사를 사용하여 이것을 호출 할 때 들어오는 매개 변수 이름이 scheduleDate 인 다음 형식을 사용합니다.

예 :
https : // localhost / api / getScheduleForDate? scheduleDate = 2003-11-21T01 : 11 : 11Z


답변