-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feeds / Streams #19
Comments
Solche Feed-ähnlichen Abfragen (also sortiert nach "letzte Änderung") muss es in jedem Fall geben. Da wir die API-Ausgabe grundsätzlich auf JSON aufbauen wollen, sollten auch diese Methoden JSON zurück liefern. Darüber hinaus sollte es möglich sein, die Rückgabe zu blättern, um mehr als nur eine festgelegte Anzahl von Einträgen abzurufen. |
Siehe also auch issue #12 |
Workshop: SHOULD Feeds für neue, geänderte, gelöschte/zu löschende Objekte. Ein Problem ist, dass bisher häufig weder alle Objekte entsprechende Zeitstempel haben noch gelöschte Objekte zu ermitteln sind. |
Wenn man die Objekte nach einem per Parameter angebbaren Zeitpunkt liefern kann, dann kann man dabei auch alle Objekte ohne Zeitstempel mit übermitteln. Oder man schafft auch Feeds für solche Objekte, für die im RIS keine geeigneten Zeitstempel vorhanden sind. Damit bekommt man dann auch vollständige Daten Dumps hin. Der obligatorische Hinweis auf ein paar möglicherweise relevante Standard(-Entwürfe) darf nicht fehlen (Eselsohr für mich): JSON Activity Streams 2.0 The Atom Syndication Format The Atom Publishing Protocol |
Der Refserver gibt nun die drei Feeds in der einfachsten denkbaren Form aus. http://refserv.oparl.org/feeds/new/ Das Ausgabeformat ist jeweils eine Liste von IRIs/URLs. Paginierung ist da noch nicht berücksichtigt. Zweck der Feeds ist ja die Cache-Aktualisierung auf Seite des Clients. Im Fall von "removed" reicht das nach meiner Einschätzung aus. Der Client kann die URL nutzen, um das Objekt aus seinem Cache zu entfernen. Bei "new" reicht die URL wahrscheinlich ebenfalls aus, denn der Client kann einfach in seinem Cache nachsehen, ob er die URL schon hat. Wenn nicht, wird er ohnehin das ganze Objekt abrufen wollen. Bei "updated" reicht es nach meiner Ansicht nicht aus, nur die URL des Objekts zu nennen, denn dann müsste der Client das Objekt immer wieder abrufen, um z.B. am last_modified Datum zu sehen, ob seine Version im Cache die selbe ist wie auf dem Server. Daher denke ich, wir sollten fordern, dass mit jedem Eintrag in der Liste zur URL auch das last_modified Datum ausgeben werden muss. Beispiel: [
{
"@id": "http://refserv.oparl.org/bodies/0/meetings/0",
"last_modified": "2014-01-12T14:28:31+0100"
},
{
"@id": "http://refserv.oparl.org/bodies/0",
"last_modified": "2014-01-08T14:00:00+0100"
},
...
] |
Soll dann ein RSS-Feed im herkömmlichen Sinne im XML Format werden? Oder ist das einfach eine Abfrage über Neuigkeiten, die man an den Server stellt. Wenn es eine Abfrage ist, könnte man doch einfach das Datum seiner letzten Abfrage mitschicken, dann muss der Server gar nicht wieder und wieder die Liste der Update/Remove und Inserts der letzten zehn Jahre schicken. Es ist durchaus Bewegung in den Daten des RIS. Mir stellt sich auch die Frage, ob der Cleint nicht genau sagen sollte welche Objektart ihn interessiert. Reicht es wenn die URL eines bereits entferten Objektes melde, Objekt nicht mehr im Bestand, oder mussen die Eigenschaften des Objekts noch verfügbar sein. |
Aus meiner Sicht brauchen wir keinen RSS oder Atom Feed, sondern sollten ein Format wählen, das möglichst nah an den restlichen Ausgaben der API korrespondiert. Also JSON (bzw JSON-LD bzw. JSONP). Die Möglichkeit, die Feeds mit einer unteren Datumsgrenze abzufragen, finde ich interessant. Allerdings ist zu bedenken, dass der Client auch ein Datum wählen kann, das sehr weit in der Vergangenheit liegt. In diesem Fall wäre es praktisch das gleiche, ob man ohne Datumsgrenze abgefragt hat oder mit. Es wird also auch noch eine Limitierung bzw. Paginierung der Ausgabe geben müssen (vgl. #66 ). Eine Einschränkung nach Objektart ist eine gute Möglichkeit, die Anfrage so ressourcenschonend wie möglich zu gestalten. Das finde ich richtig. Bei entfernten Objekten reicht aus meiner Sicht tatsächlich die URL. |
Das der Client ein Datum weit in der Vergangenheit wählen kann ist natürlich technisch möglich. Aber immer noch besser als keins vorzusehen. Im Prinzip müssten genau aus diesem Grund die Veränderungsinformationen ja quasi auch ewig aufbewahrt werden. Da ja immer mal mal wieder ein "lange" nicht aktualisierte Client auftauchen könnte. Vielleicht wäre es zulässig eine Grenze festzulegen z.B. 5 Jahre (vom Implementierer?) ab wann man mit einer Api-Fehlermeldung antwortet. Dann muss der Cleint seinen Cache eventuell verwerfen oder anderes angemessen reagieren. |
Ja, ich denke, das ist sinnvoll. Wir können nicht erwarten, dass der Server ins unendliche wachsende Logs bereit hält. |
Ich halte die Datenmenge für solche "Logs" angesichts der Entwicklung der Speicherpreise für unproblematisch. Einen Ansatz, den wir in der Arbeitsgruppe des Workshops überlegt hatten verzichtet vollständig auf die explizite Parameter-Übergabe von Zeitpunkten und bietet stattdessen Logs für feste Zeitabschnitte über IRIs mit einem definierten Aufbau an, z.B.
für alles aus dem Jahre 201, oder
für alles aus dem Mai 2013. Dabei kann ein Zugriff auf eine Jahres-IRI eine Liste von Monats-IRLs liefern und diese Tages-IRIs. Mit
würde man alle jahres-IRIs erhalten. (Das wird auch in 1000 Jahren noch funktionieren :-) Datumsgrenzen gibt es dann implizit. Ein Vorteil ist, dass damit ein Caching auf Server-Seite vereinfacht wird und es eine hohe Trefferwahrscheinlichkeit gibt. Inzwischen frage ich mich, ob man das "Löschen" von Objekten / Dokumenten wie eine "normale" Änderung behandeln kann. Die entsprechen IRIs würden danach nicht ins Leere verweisen (also einen 404-Fehler ergeben), sondern einen geeigneten Fehlerinhalt liefern (der noch festzulegen wäre). Dies entspricht auch besser der grundsätzlichen Forderung nach persistenten IRIs. Ein separater removed Stream kann dann entfallen. |
Hier habe ich mehrere Anmerkungen.
|
RFC 2616 (http://tools.ietf.org/html/rfc2616) zum 410 (Gone) status code, finde ich gut:
|
@marians Bei der Zielsetzung "den Server-Implementierern so wenig wie möglich Vorgaben in Bezug auf die URL-Gestaltung machen" sind wir uns vollkommen einig. Der Parameter callback für JSONP ist unproblematisch, da dies nur den Datentransport betrifft, aber nicht den Inhalt der angeforderten Daten. Die beiden Parameter für Anfangs- und Enddatum betreffen aber den Inhalt. Ich suche nach einer Alternative, die im Ergebnis genau das selbe erreicht, aber die beiden Parameter nicht benötigt. Sie wäre zwar möglicherweise mit etwas mehr Aufwand auf Client-Seite verbunden, aber nicht viel. Und Paging muss ja ohnehin vorgesehen werden. Eine Spezifikation einer Datums-URL-Struktur ist überhaupt nicht erforderlich. Man muss nur über eine Einstiegs-URL an eine Liste weiterer (zeitlich sortierter) URLs für kürzere Zeiträume kommen. Festlegen könnte man allerdings, dass jeweils IRIs für je ein Kalenderjahr, einen Kalender-Monat bzw. einen Kalender-Tag angeboten werden müssen. Wenn zudem jeweils der Zeitraum vom Server mitgeliefert wird, dann bekommt der Client sämtliche Daten, die er benötigt - und für keinen Tag mehr ! |
@marians Wenn ich das richtig verstehe, dann ist der eigentliche Unterschied zwischen den beiden Streams nicht zwischen Entfernen und Ändern sondern zwischen dringend und weniger dringend. Es kann ja auch dringende normale Änderungen von Daten geben, z.B. bei einer Orts- oder Zeitangabe einer zukünftigen Sitzung - oder auch deren Absage. |
RFC 5005 ist auch relevant: Feed Paging and Archiving |
Inwiefern ist RFC5005 relevant? |
Insofern als es ein Standarddokument ist, in dem es auch um das Paging von Feeds geht. Allerdings kommt (im Gegensatz zu den Vorschlägen zu Paging von Hydra bzw. der Linked Data Platform) eine 1zu1-Übernahme offensichtlich nicht in Frage. |
Info aus dem Workshop vom 26.3.2014: Alle drei feeds (deleted, new, modified) sind EMPFOHLEN, aber nicht ZWINGEND. |
Der Abschnitt zu Feeds ist inzwischen im Dokument ausformuliert. Siehe Kapitel 4.8 bzw. https://github.com/OParl/specs/blob/master/dokument/master/chapter_6070.md . Dieses Issue schließe ich daher. Es gibt eine Veränderung gegenüber dem Stand in diesem Thread. Nach weiterer Überlegung habe ich im Dokument bei allen drei Feeds die Ausgabe des jeweils relevanten Datums empfohlen. Also Erstellungs-, Bearbeitungs bzw. Löschungszeitraum. Sollte es dazu noch eine Kontroverse geben, bitte das Issue wieder öffnen und kommentieren. |
Wie werden neue Informationen bekannt gemacht? Atom Feeds?
Beispiele:
The text was updated successfully, but these errors were encountered: