Closed akuckartz closed 10 years ago
@marians Ich schlage einen Verzicht auf die OParl-Paging-Konstruktionen und stattdessen die Verwendung der in HTTP 1.1 für den Abruf/die Übertragung großer Dateien vorgesehenen Mechanismen vor.
Mir ist keine Webservice API bekannt, die das so macht. Würde ich daher nicht als Best Practise bezeichnen.
Aufteilung von Listen in chunks findet man in vielen Webservice APIs und kennt man von Datenbank-Schnittstellen und SQL. Ich sehe nicht, wie sowas in der OParl API ein Fremdkörper ist.
Ich möchte am Listen-Konstrukt festhalten, als bislang IMHO bessere Option.
Bisherige Webservice APIs sind ja gerade das Problem ;-)
Ausserhalb dieser Paging-Dinge gibt es gegenwärtig erfreulicherweise fast nichts in OParl, was eine API wäre - weshalb ich die Charakterisierung von OParl als "API" auch für nicht korrekt halte.
Wir haben ein Standard-Protokoll (http 1.1) und ein Standard-Format (JSON-LD), ein Vokabular und ein paar Konventionen zu deren Verwendung. Ein Client soll deshalb idealerweise nichts mit Paging zu tun haben müssen. Wenn wir dem Client die Alternative einräumen, die Daten vom Server in einem Rutsch (oder per http in Einzelstücken) zu erhalten, dann ist das für mich auch ok.
Nebenbei: Die Diskussionen hierzu sind interessant (das wird so bald nicht fertig werden):
Linked Data Platform Paging 1.0 https://dvcs.w3.org/hg/ldpwg/raw-file/default/ldp-paging.html
Hier ist noch eine Alternative, die ich klug finde.
Sie wird beispielsweise auf http://envirocar.github.io/enviroCar-server/api/ unter "Pagination" beschrieben.
Es geht darum, im HTTP Response per Header die URLs zu weiteren Ergebnisseiten zu kommunizieren. Beispiel:
Link: <https://envirocar.org/api/stable/measurements?limit=2&page=1>;rel=first;type=application/json
Link: <https://envirocar.org/api/stable/measurements?limit=2&page=19>;rel=prev;type=application/json
Link: <https://envirocar.org/api/stable/measurements?limit=2&page=21>;rel=next;type=application/json
Link: <https://envirocar.org/api/stable/measurements?limit=2&page=4169>;rel=last;type=application/json
Mittels "rel=next" etc. wird erklärt, was der Link tut. Das richtet sich nach RFC5988 (http://tools.ietf.org/html/rfc5988).
Bisher finde ich das favorisierenswert.
@marians Ja, Paging über http-Header zu behandeln ist generell eine Möglichkeit. Ich mache mir in den nächsten Tagen Gedanken darüber was eventuell dagegen spricht und ob/wie das zu den W3C LDP Paging Plänen passt.
@marians Der W3C LDP Paging Entwurf stützt sich ebenfalls auf RFC 5988. Das spricht also tendentiell für eine solche Lösung. Ich habe mir deshalb auch kurz den Stand von LDP Paging weiter angesehen: https://dvcs.w3.org/hg/ldpwg/raw-file/default/ldp-paging.html#atrisk-333
Möglicherweise können ein paar Detail-Lösung daraus auch für OParl Paging verwendet werden. Alle auf keinen Fall, da ein paar Features als "at risk" deklariert sind und neue http status codes gewünscht werden, was auch von der IETF abhängt. Gut ist, dass in diese Paging-Spezifikation viel Arbeit und Expertise rein gesteckt wird - nicht nur von IBM und Oracle. Gleichzeitig hält sich die Komplexität in Grenzen.
Ich habe mir das genauer angesehen und bin jetzt auch für Paging per Link Header. Das dürfte insgesamt die beste Lösung sein, denn es:
Super. Ich kann anbieten, das heute einzubauen. Soll ich?
@marians Ja, gerne.
Habe das Kapitel (aktuell 4.8.2) nun überarbeitet. In Kürze:
rel=next
ist Pflicht, sofern es eine nächste Seite gibtrel=first
, rel=prev
, rel=last
sind optionalIch schließe das Issue. Wie immer: Wieder öffnen, wenn nötig.
Statt der Aufteilung größerer Datenmengen auf JSON-LD oder OParl-Ebene (wo sie ein Fremdkörper ist) kommt eventuell die Verwendung klassischer http-Mechanismen in Frage.