web-dev-qa-db-fra.com

Format de date recommandé pour REST GET API

Quel est le format d’horodatage recommandé pour une API GET REST) comme ceci:

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

Je pense que le format de date réel devrait être le format ISO 8601, tel que YYYY-MM-DDThh:mm:ssZ pour l'heure UTC.

Devrions-nous utiliser la version ISO 8601 sans les traits d'union et les deux points, tels que:

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

ou devrions-nous encoder le format ISO 8601, en utilisant par exemple l'encodage en base64?

82
Lorenzo Polidori

REST n'a pas de format de date recommandé. En réalité, tout se résume à ce qui fonctionne le mieux pour votre utilisateur final et votre système. Personnellement, je voudrais coller à une norme similaire à celle d’ISO 8601 (code URL).

Si vous n’avez pas d’URI laid, c’est un problème (par exemple, ne pas inclure la version codée dans l’URL de :, -, dans votre URI) et l’adressabilité (humaine) n’est pas aussi importante, vous pouvez également prendre en compte le temps Epoch (par exemple, http://example.com/start/1331162374). L'URL semble un peu plus propre, mais vous perdez certainement de la lisibilité.

Le /2012/03/07 est un autre format que vous voyez souvent. Vous pouvez développer ce que je suppose. Si vous choisissez cette voie, assurez-vous que vous êtes toujours soit à l'heure GMT (et précisez-le dans votre documentation), ou vous pouvez également inclure une sorte d'indicateur de fuseau horaire.

En fin de compte, cela se résume à ce qui fonctionne pour votre API et votre utilisateur final. Votre API devrait fonctionner pour vous, pas pour vous ;-).

63
nategood

Consultez cet article pour connaître les 5 lois des dates et heures de l'API ICI :

  • Loi n ° 1: Utilisez ISO-8601 pour vos dates
  • Loi n ° 2: Accepter n'importe quel fuseau horaire
  • Loi n ° 3: Stockez-le au format UTC
  • Loi n ° 4: le retourner en UTC
  • Loi n ° 5: n'utilisez pas le temps si vous n'en avez pas besoin

Plus d'infos dans la documentation.

69
mohamed-ibrahim

RFC6690 - Format de lien pour les environnements RESTful restreints (CoRE) N'indique pas explicitement quel format de date doit être placé dans section 2. Format de lien il renvoie à la RFC 3986. Cela implique que la recommandation pour le type de date RFC 3986 doit être utilisé.

En gros RFC 3339 Date et heure sur Internet est le document à regarder qui dit:

le format de date et d’heure à utiliser dans les protocoles Internet constitue un profil de la norme ISO 8601 pour la représentation des dates et des heures à l’aide du calendrier grégorien.

ce qui revient à: AAAA-MM-JJTHH: mm: SS.SS ± hh: mm

(par exemple 1937-01-01T12: 00: 27.87 + 00: 20)

Est le pari le plus sûr.

12
Matas Vaitkevicius

Chaque champ date/heure en entrée/sortie doit être au format NIX/Epoch. Cela évite la confusion entre les développeurs de différents côtés de l'API.

Avantages:

  • Le format d'époque n'a pas de fuseau horaire.
  • Epoch a un seul format (l'heure Unix est un seul numéro signé).
  • L'heure de l'époque n'est pas affectée par l'heure d'été.
  • La plupart des infrastructures de backend et toutes les API natives ios/Android prennent en charge la conversion Epoch.
  • La conversion de l'heure locale peut être entièrement effectuée côté application, en fonction du fuseau horaire défini pour le périphérique/navigateur de l'utilisateur.

Inconvénients:

  • Traitement supplémentaire pour la conversion en UTC pour le stockage au format UTC dans la base de données.
  • Lisibilité des entrées/sorties.
  • Lisibilité des URL GET.

Notes:

  • Les fuseaux horaires sont un problème de couche présentation! La plupart de votre code ne devrait pas traiter de fuseaux horaires ni d’heure locale, il devrait faire passer le temps Unix.
  • Si vous souhaitez stocker une heure lisible par l'homme (journaux, par exemple), envisagez de la stocker avec l'heure Unix, et non au lieu de l'heure Unix.
5