Documentation de demarches-simplifiees.fr
  • Généralités
  • Présentation
  • Cible
  • Démarrage
  • Cas d'usage
  • Tutoriels et vidéos
    • Tutoriel usager
    • Tutoriel « expert invité »
    • Tutoriel instructeur
    • Tutoriel administrateur
    • Les bonnes pratiques lors de la création d'une démarche
    • Vidéo : la sécurité de demarches-simplifiees.fr
    • Vidéo : le cadre juridique
    • Vidéo : la relation usager
    • Intégration du bouton « Mon avis »
  • Nouveautés
    • Pour les administrateurs
    • Pour les instructeurs
    • Pour les usagers
  • Expérimentations
    • Type de champ expression régulière
    • Chorus
  • Nos démarches
    • Démarches modèles à dupliquer
    • Démarches relatives au permis de conduire
    • Démarches relatives aux transporteurs
    • Démarches relatives au secteur du transport public de tourisme (T3P) - Taxis et VTC
    • Démarches relatives aux étrangers résidant en France
    • Démarches relatives aux inscriptions scolaires (inscription, restauration, centres de loisirs)
    • Démarches relatives aux médailles d'honneur
    • Démarches relatives aux Tribunal judiciaire de Lille
  • Conditions Générales d'Utilisation
  • Conditions générales d'utilisation : usagers
  • Politique de confidentialité
  • Mentions légales
  • API GraphQL
    • Automatisation : obligations des utilisateurs publics
    • Introduction technique
    • Accréditation
    • Le playground / Premiers pas
    • Point d'entrée et Schema GraphQL
    • Jeton d'authentification
      • Problèmes fréquents
    • Les queries
      • getDemarche
      • getDossier
      • getGroupeInstructeur
      • getDemarcheDescriptor
    • Les mutations
      • Modifier l'état d'un dossier
      • Envoyer un message
      • Ajouter ou supprimer un label
    • Pagination
    • Gestion des Erreurs
    • Cas d'usages / exemple d'implémentation
      • Client de démo en JS
      • Autentification
      • Récupérer un dossier
      • Pagination – Synchroniser une démarche à faible volumétrie (polling simple)
      • Pagination – Récupérer tous les dossiers d'une démarche
      • Pagination – Synchroniser une démarche à forte volumétrie (synchronisation)
      • Télécharger les fichiers uploadés par un usager sur son dossier
      • Envoyer un message avec une PJ
      • Accepter un dossier et y joindre un justificatif (une PJ)
      • Lister les Id des instructeurs
  • Pour aller plus loin
    • Cartographie
    • API de préremplissage
    • Aspects techniques et juridiques
    • Exports de données
    • Exports et Macros
    • Routage des dossiers
    • Webinaires
    • Horodatage
    • Archivage longue durée des démarches
    • Le conditionnel
    • Eligibilité des dossiers
    • Export personnalisé
  • Communiqués de presse
  • Expiration et suppression des dossiers
Propulsé par GitBook
Sur cette page
Exporter en PDF
  1. API GraphQL
  2. Cas d'usages / exemple d'implémentation

Pagination – Synchroniser une démarche à faible volumétrie (polling simple)

Exemple de cas d'usage : votre démarche a moins de 100 changements sur ses dossiers par jour et vous souhaitez synchroniser tous les dossiers dans votre SI.

Nos API renvoient jusqu'à 100 dossiers maximum par requête. De fait, si il y a moins de 100 dossiers modifiés par jours sur votre démarche, une tache planifiée (ex quotidienne) récupérant tous les derniers dossiers modifiées vous permettra de suivre tous les dossiers.

Ainsi il est plus intéressant d'éviter la compléxité d'un mechanisme de pagination au profit d'un mechanisme de polling.

API_TOKEN="votre_token" DEMARCHE_NUMBER=votre_numero_de_demarche ruby get_last_updated_dossiers.rb
get_last_updated_dossiers.rb
require 'date'
require 'net/http'
require 'uri'
require 'json'

ENDPOINT = URI('https://www.demarches-simplifiees.fr/api/v2/graphql')

### that's the GraphQL part.
QUERY = <<~QUERY
query getDemarche(
    $demarcheNumber: Int!
    $last: Int
    $after: String
    $updatedSince: ISO8601DateTime
    $includeDossiers: Boolean = true
  ) {
    demarche(number: $demarcheNumber) {
      dossiers(
        last: $last
        after: $after
        updatedSince: $updatedSince
      ) @include(if: $includeDossiers) {
        pageInfo {
          ...PageInfoFragment
        }
        nodes {
          id
          dateDerniereModification
        }
        pageInfo {
          endCursor
          hasNextPage
        }
      }
    }
  }

  fragment PageInfoFragment on PageInfo {
    hasPreviousPage
    hasNextPage
    endCursor
  }
QUERY

### that's the HTTP part
# open an http connexion to our GraphQL endpoint
def open_http_connection
  http = Net::HTTP.new(ENDPOINT.host, ENDPOINT.port)
  if ENDPOINT.scheme == 'https'
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
  http
end

# the headers of our http query, include auth
def request_headers
  {
    "Content-Type" => "application/json",
    "Authorization" => "Bearer #{ENV.fetch('API_TOKEN') { raise 'missing env var API_TOKEN' }}"
  }
end

# given an http connexion, request the API for page
def request_page(http)
  # the data of our query
  data = {
    "query" => QUERY,
    "operationName" => "getDemarche",
    "variables" => {
      "demarcheNumber": ENV.fetch('DEMARCHE_NUMBER') { raise 'missing env var DEMARCHE_NUMBER' }.to_i,
      "last": 1, # récupérer le derniers, le sens de la pagination
      "updatedSince": Date.new(2020, 2, 22).iso8601 # récuperer les dossiers par ordre de derniere date de mise a jour
    }
  }

  req = Net::HTTP::Post.new(ENDPOINT, request_headers)
  req.body = data.to_json

  response = http.request(req)
  data = JSON.parse(response.body)
  data
end

http = open_http_connection

# check if we persisted a cursor so we continue polling
data = request_page(http)
dossiers = data.dig('data', 'demarche', 'dossiers', 'nodes')
puts "Info: fetched dossiers ids: #{dossiers.map { _1['number'] }.join(', ')}"
puts "Debug: #{data.inspect}"
PrécédentRécupérer un dossierSuivantPagination – Récupérer tous les dossiers d'une démarche

Dernière mise à jour il y a 1 an