Diffusion et Téléversement

callApiStream de Core lit la réponse NDJSON en JSON ligne par ligne et émet dans l'Observable dans l'ordre.


Utilisation directe de callApiStream dans Core.

Utilisez callApiStream lorsque le serveur renvoie NDJSON (un JSON par ligne). Si l'en-tête Accept est absent, application/x-ndjson est défini par défaut, et d'autres types de médias peuvent être écrasés par des en-têtes par requête.

ts
export const streamEvents = () => {
  return client.callApiStream<{
    eventName: string;
    content: unknown;
  }>({
    url: "/api/event/stream",
    method: "get",
    // headers: { Accept: "application/x-ndjson" },
  });
};

Format de réponse NDJSON.

text
{"status":"STARTED","progress":0}
{"status":"PROGRESS","progress":35}
{"status":"PROGRESS","progress":80}
{"status":"DONE","progress":100}

callApiStreamDivise la réponse en fonction des sauts de ligne et analyse chaque ligne avec JSON.parse. Il attend NDJSON et non le format standard de trame data: SSE.

Abonnement et désabonnement à l'Observable.

tsx
const subscription = streamEvents().subscribe({
  next: (event) => {
    setProgress(event.content);
  },
  error: (error) => {
    setErrorMessage(error.message);
  },
  complete: () => {
    setRunning(false);
  },
});

return () => subscription.unsubscribe();

unsubscribe() annule également le lecteur ReadableStream interne. Désabonnez-vous dans l'effet React ou le nettoyage de tâche.

Optionnel : Utilisation du service stream généré.

Dans les projets utilisant OpenAPI generator, vous pouvez faire en sorte que le service généré pour le point de terminaison stream appelle callApiStream. Dans l'interface, importez et abonnez-vous de la même manière que le service généré normal.

tsx
const subscription = jobProgress({
  path: { jobId },
}).subscribe({
  next: (event) => {
    setProgress(event.progress || 0);
  },
  error: (error) => {
    setErrorMessage(error.message);
  },
  complete: () => {
    setRunning(false);
  },
});

return () => subscription.unsubscribe();

uploadFile : PUT de fichier à l'URL spécifiée.

uploadFile.ts
ts
service.uploadFile({
  file,
  url: signedUploadUrl,
  headers: {
    "Content-Type": file.type || "application/octet-stream",
    "If-None-Match": "*",
  },
}).subscribe();
© 2026 Byeolnaerim. Tous droits réservés.PrésentationPolitique de confidentialité