Zum Hauptinhalt springen

Listen und Paginierung

Reelwire hat zwei Arten von Listen, und sie verhalten sich absichtlich verschieden.

Protokolle hören nie auf zu wachsen: /v1/jobs, /v1/posts, /v1/render-jobs, /v1/ingest-events, /v1/approvals und /v1/deliveries. Sie werden vom Server paginiert, durchsucht und sortiert, über jede Zeile, die der Workspace hat. Auch die Syndikationslisten werden vom Server paginiert, mit ein paar eigenen Unterschieden: siehe Weitere paginierte Listen.

Konfiguration wächst nicht unbegrenzt: Marken, Kanäle, Streams, Beitragslisten, die Mediathek. Sie kommt vollständig zurück, und der Client durchsucht und sortiert sie selbst. Eine Mediathek besteht aus Hunderten von Dateien, nicht aus Millionen, und sie zu paginieren brächte nichts und kostete einen Round-Trip.

Die Log-Parameter​

ParameterWas es bewirkt
pageWelche Seite, ab 1. Alles andere wird als 1 behandelt.
perPageWie viele je Seite. 1 bis 200; außerhalb davon der eigene Standard der Route.
limitDer ältere Name für perPage, weiterhin berücksichtigt.
qWas getippt wurde, ohne Beachtung der Groß- und Kleinschreibung abgeglichen über die Spalten, die die Zeile ausgibt. Höchstens 200 Zeichen.
sortEin Spaltenname, den die Route anbietet. Alles andere fällt auf die Standardreihenfolge der Route zurück.
ascending"true" oder "false". Fehlt es, gilt der eigene Standard der Route: die neuesten zuerst, außer bei /v1/approvals, das eine Warteschlange ist und mit den ältesten zuerst gelesen wird.
since, untilDas Zeitfenster, als absolute Zeitpunkte.
curl "http://localhost:4000/v1/render-jobs?page=2&perPage=25&q=bund&sort=state&ascending=true" \
-H "Authorization: Bearer rw_your_key_here"

Die Spalten, nach denen jedes Protokoll sortiert werden kann:

Routesort
/v1/jobscreatedAt. Alles andere ist der Standard, wann sich der Auftrag zuletzt geändert hat.
/v1/postscreatedAt, state, platform, channelName
/v1/render-jobssubmittedAt, state, templateId
/v1/ingest-eventsreceivedAt, status, origin
/v1/approvalsrequestedAt, channelName
/v1/deliveriescreatedAt, updatedAt

Jedes Protokoll antwortet mit der Seite und den Zählwerten drumherum:

{
"jobs": [],
"total": 7,
"all": 7,
"page": 1,
"perPage": 1,
"facets": { "state": ["COMPLETED"] }
}
FeldWas es ist
totalZeilen, die den Filtern entsprechen. Durch perPage teilen für die letzte Seite.
allZeilen im angefragten Zeitfenster, ohne Beachtung der anderen Filter und der Suche, sodass Sie „7 von 412“ sagen können.
page, perPageWas Sie tatsächlich erhalten haben, nach dem Begrenzen.
facetsDie Werte, die jeder Filter sinnvoll annehmen kann.

Der Standard von perPage ist je Route verschieden, weil die Seiten verschieden sind: 25 für /v1/jobs, 40 für /v1/posts und /v1/deliveries, 30 für /v1/render-jobs, 50 für /v1/ingest-events, 200 für /v1/approvals. Senden Sie perPage, statt sich auf einen davon zu verlassen.

/v1/jobs antwortet mit zwei weiteren Zählwerten: stages, wie viele Beiträge jede Stufe hält, und unstaged, wie viele die Suche und die Filter vor der Wahl einer Stufe übrig lassen.

Facetten werden aus den Zeilen gelesen​

facets wird aus dem berechnet, was der Workspace tatsächlich hält, nicht aus einer festen Liste. Ein Filterwert, der dort erscheint, kann etwas zurückgeben, und ein Zustand, in dem nichts ist, erscheint nicht. Einige Listen tragen auch labels, das IDs in den Facetten Namen zuordnet, sodass ein Filter-Dropdown keine zweite Anfrage braucht, um „Channel 4 de“ statt einer ULID zu sagen. Die Ausnahmen sind die drei festen Auswahlen bei /v1/jobs, stage, approval und archive, die alles auflisten, was der Filter annimmt.

Ein nicht lesbarer Filter weitet, statt abzulehnen​

since und until, die nicht gelesen werden können, werden ignoriert, nicht abgelehnt. Das ist ein Filter auf einer Liste, und der ehrliche Fehlschlag ist, mehr zu zeigen, nicht einen Fehler. Dasselbe gilt für eine sort-Spalte, die eine Route nicht anbietet, und für einen in der Query-String wiederholten Filter: Ein zweimal angegebener Schlüssel kommt als Array an, ein Filter ist immer nur ein Wert, daher wird er als gar kein Filter behandelt.

Eine Suche mit mehr als 200 Zeichen ist die eine Ausnahme und ein 400.

Zeitfenster bedeuten Verschiedenes​

Bei /v1/jobs ist das Zeitfenster der Zeitpunkt, an dem dem Auftrag etwas geschah: Er traf ein, er wurde gerendert, oder einer seiner Beiträge änderte sich. Ein Auftrag, der gestern eintraf und vor zehn Minuten veröffentlicht wurde, liegt in der letzten Stunde, weil die Zeilen nach Aktualisiert sortiert sind und alles andere gelogen wäre.

Bei /v1/posts, /v1/render-jobs und /v1/deliveries ist es der Zeitpunkt, an dem die Zeile erstellt wurde, und bei /v1/ingest-events der, an dem das Ereignis eintraf. /v1/approvals nimmt kein Zeitfenster: Es ist die Warteschlange dessen, was jetzt wartet.

/v1/calendar ist kein Protokoll und nimmt stattdessen from und to, beide erforderlich, beide absolute Zeitpunkte, mit einem Zeitfenster von höchstens 367 Tagen.

Sicher paginieren, während Neues eintrifft​

Ein Protokoll ist mit den neuesten zuerst geordnet, daher verschiebt eine Zeile, die zwischen zwei Anfragen eintrifft, alles um einen Platz nach unten, und Seite 2 kann eine Zeile wiederholen, die Seite 1 schon zeigte. Zwei Wege drumherum:

  • Das Zeitfenster festlegen. Übergeben Sie until auf den Moment, in dem Sie begonnen haben, und blättern Sie durch eine Menge, die unter Ihnen nicht wachsen kann.
  • Vom ältesten Ende aus paginieren, mit ascending=true, wenn Sie alles lesen und nicht nur das Neueste.

Jede Zeile trägt eine ID, sodass Deduplizieren unterwegs funktioniert, was auch immer Sie tun.

Weitere paginierte Listen​

/v1/syndication/partners und /v1/syndication/deliveries nehmen q, page, perPage und ascending, kein sort und kein Zeitfenster: Sie sind immer in der Reihenfolge, in der die Zeilen erstellt wurden, die neuesten zuerst. perPage ist standardmäßig 50 und bei den Teilnehmern höchstens 500, bei den Zustellungen 200, und eine größere Zahl wird auf dieses Maximum gekürzt, nicht ignoriert. Die Zustellungen antworten mit total, all (jede Zeile, die der Workspace hat) und facets; die Teilnehmer antworten mit total und room, dem Kontingent, gegen das sie zählen, und ohne Facetten. Siehe Syndikation.

Die Listen, die nicht paginiert werden​

/v1/brands, /v1/channels, /v1/streams, /v1/queues, /v1/media, /v1/media/renders, /v1/feeds, /v1/templates und /v1/syndication/groups liefern alles. page und perPage bewirken bei ihnen nichts.

Einige liegen dazwischen: Listen, die allein limit nehmen, ohne Seite.

Routelimit
/v1/direct-export/videosStandard ist 24, höchstens 100.
/v1/direct-export/queueNicht genommen: jedes Video, das noch gerendert wird oder wartet, die, die in den letzten zwei Stunden fehlschlugen, und die 100 neuesten behaltenen.
/v1/ai/chatsNicht genommen: die 50 jüngsten Chats des letzten Tages.

/v1/pipeline ist eine Live-Ansicht und kein Protokoll: Es nimmt since und until und zeigt höchstens 12 Aufträge in jeder Spur neben Zählwerten, die alle abdecken. Siehe Beiträge und Aufträge.