IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Faire une requête de boucle api ou faire une seul requête ?


Sujet :

JavaScript

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut Faire une requête de boucle api ou faire une seul requête ?
    Bonsoir,

    je dois afficher un calendrier de rendez-vous , je me pose la question si faire une boucle d'api est une mauvaise pratique ou pas ?

    Voici comment je conçois cette fonctionnalité.

    sur le front(du typescript angular):
    - on récupère la date client d'aujourd'hui qui sera un timestamp
    - sur ce timestamp je vais lui ajouter 864000 seconde (24H), avec ce timestamp et l'ajout de 24H,
    je vais demander à l'api si dans cette plage de journée il y a un rendez-vous, ensuite je vais répéter 7 fois la même chose pour obtenir 1 semaine
    - si la journée est prise je dois afficher un décade d'horaire de la journée(par exemple de 8 à 9 heure c'est libre, de 9H à 10 heure c'est pris jusqu'a la fin de la journée à 17H).
    - si la journée n'est pas prise, j'affiche juste que cette journée est disponible, je n'ai pas besoin de sollicité l'api pour les tranches d'horaires.

    sur mon backend (du php):
    soit je fait travailler 7 fois l' API, je renvoie si la journée en question est dispo ou pas

    soit je fais travailler 1 seul fois l' API , l'api récupère 7 jours et je fais une boucle à 7 passage pour testé si dans la journée j'ai pris un rendez-vous

    Pour ma part demander 7 fois à l'api et plus facile pour coder.

    Si on est obligé de récupérer les demandes de disponibilité , je suis obligé de construire une json qui contient chaque plage de timestamp pris.

    J'espère que mon explication est compréhensible ...

    merci d'avance de vos réponses

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    l'appel répété à l'API est déconseillé si le nombre d'appels augmente avec le temps. par exemple si côté client vous avez besoin de faire un appel par rendez-vous, cela peut bien fonctionner au début. mais si quelques mois plus tard, vous avez 3 000 rendez-vous stockés, cela sera ingérable.
    dans votre cas, vous savez qu'il y aura au maximum 7 appels donc même si le remplissage de la base peut ralentir la durée d'un traitement, vous maitriserez toujours la durée complète pour que ça reste raisonnable.

    ensuite un autre point à voir est de chercher si ce traitement de recherche des 7 jours pourrait servir à d'autres clients. dans ce cas, il pourrait être intéressant de créer un nouveau point d'entrée dans l'API qui pourrait être utile à plusieurs.

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    merci de la réponse, je pense que je serais obligé alors de créer un json qui contient les plages de rendez vous.
    Est ce que je dois faire un json comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    //requête api en post
    {
      "plage jour": 7,
      "timestamp start":1528629751
    }
     
     
    //exemple réponse de l'api
    {
      "plage jour": 7,
      "timestamp start":1528629751,
      "semaine": {
          "dimanche": 0,
        "lundi": 0,
        "mardi": 0,
        "mercredi": 0,
        "jeudi": {
          "plage": {
            "8": false,
            "9": false,
            "10": true,
            "11": true,
            "12": false,
            "13": false,
            "14": false,
            "15": true,
            "16": true
          },
          "vendredi": 0,
          "samedi": 0,
     
        }
      }
    }
    ici du côté frontend , j'envoie juste la date de départ et le nombre de jour à dérouler.
    côté backend, je fait

    - une boucle "scanner les jours de semaine"
    - si dans la boucle des jours je détecte qu'il y a un rendez-vous, je dois faire un autre boucle pour déterminer toutes les plages de la journée

    Au retour du résultat l'API doit me fournir ce json comme dans l'exemple, on lit que jeudi il y a un rendez-vous de 10H à 12H.

    les plages non pris doit être récupérer car il seront affiché sous forme de case coloré, true couleur rouge, et false couleur vert.
    Comment je dois me débrouiller avec ce json avec javascript?
    quand je récupère le json, doit être être transformer à un tableau pour être facilement traiter dans une boucle ?

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    le JSON est un format de base de JavaScript donc si le serveur envoie cet exemple, vous pouvez par exemple lire le contenu de jeudi avec reponse["semaine"]["jeudi"]
    par contre si vous avec besoin de faire une boucle sur les jours, il vaut renvoyer les jours sous forme de liste comme cela à la place d'un objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    [
    	{
    		"nomJour" : "lundi",
    		"occupe" : false,
    	},
    	{
    		"nomJour" : "mardi",
    		"occupe" : true,
    		"disponibilites" : [
    			{
    				"heure" : 8,
    				"disponible" : false,
    			},
    			{
    				"heure" : 9,
    				"disponible" : false,
    			},
    			{
    				"heure" : 10,
    				"disponible" : true,
    			},
    			{
    				"heure" : 11,
    				"disponible" : true,
    			},
    		]
    	},
    ]

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    merci pour ce json, je me suis rendu compte que générer ce résultat côté backend ce n' était pas pratique.
    Du coup, je me suis dit d'envoyer juste les timestamps qui corresponde au rendez-vous pris voici ce que j'ai dans la console:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    (2) [{}, {}]
    0
    :
    {reserverStartH: "1528714800"}
    1
    :
    {reserverStartH: "1528696800"}
    length
    :
    2
    __proto__
    :
    Array(0)
    En faisant cela je demande à l' API de faire qu'une seul requête sur une semaine entière

    du coup quel est la meilleur façon de parcourir ce résultat qui sera le data?
    voici mon bout de script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      scanSemaine(){
        this.dateJ0 = this._calendar.timestampDebJour();//date à 0H00
     
        this.scanRdv.subscribe(data=>{
          console.log(data);
          //recherche des timestamps dans la semaine
          for(let i=0; i<this.nbJour;i++){
            //recherche des decade de timestamp de 24H (84 000) seconde
            console.log(i);
          }
        });
      }
    dans cette boucle for je vais rechercher pour chaque jour pendant la semaine s'il contient le timestamp en question,
    je vais rechercher par décade de 24H.
    faut t'il directement transformer le data en string et faire une regex pour rechercher les timestamps des rendez-vous
    ou faut t'il que le data soit transformer en table, je recherche dans cette table avec une boucle en le parcourant ?
    tout les timestamp tomberons une date à 00H00

    C'est une fois que j'aurai terminer de parcourir sur l'ensemble du timestamp de la semaine que je construire le json.

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/08/2011, 16h53
  2. [mySQL5] Faire une sorte de "boucle" dans une requête
    Par mdr_cedrick dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/07/2009, 17h40
  3. Réponses: 23
    Dernier message: 31/05/2007, 16h09
  4. Réponses: 9
    Dernier message: 24/05/2003, 10h25
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo