OParl-API je Kommune¶
Jede aktive Kommune in mandari Session stellt unter
einen eigenen, OParl-1.1-konformen System-Endpunkt bereit. Die API folgt dem Muster der OParl-Aggregations-API: rein lesend, anonym, JSON, CORS offen, Rate-Limit von 120 Anfragen pro Minute je IP-Adresse.
Spezifikation: oparl.org/spezifikation
Sicherheitsgarantie: nur öffentliche Daten¶
Die API liefert ausschließlich Daten, die im Ratsinformationssystem als öffentlich markiert sind:
| Objekttyp | Sichtbarkeitsregel |
|---|---|
| Meeting | Sitzung öffentlich |
| AgendaItem | Punkt öffentlich und Sitzung öffentlich. Der nicht-öffentliche Teil erscheint nie, resolutionText enthält nur den öffentlichen Beschlusstext |
| Paper | Vorlage öffentlich |
| File | Datei öffentlich und übergeordnetes Objekt (Vorlage, Sitzung, Punkt) öffentlich |
| Consultation | Vorlage öffentlich. Referenzen auf nicht-öffentliche Sitzungen oder Punkte werden ausgelassen |
| Person | ohne geschützte Daten. Verschlüsselte Felder wie Telefon, Adresse und Bankdaten werden nie gelesen |
| Organization, Membership, LegislativeTerm | vollständig, hier gibt es keine Unterteilung |
Nicht-öffentliche Objekte existieren nach außen nicht: Ihre Objekt-Endpunkte liefern 404, sofern sie nie veröffentlicht waren. Diese Garantie wird durch automatische Tests über die gesamte API-Oberfläche abgesichert.
Endpunkte¶
| Endpunkt | Inhalt |
|---|---|
GET …/api/oparl/ | System-Objekt (Einstiegspunkt) |
GET …/api/oparl/bodies/ | Liste mit der einen Kommune |
GET …/api/oparl/body/ | Body-Objekt inklusive eingebetteter legislativeTerm |
GET …/api/oparl/organizations/ | Gremien (paginiert, filterbar) |
GET …/api/oparl/people/ | Personen (paginiert, Mitgliedschaften eingebettet) |
GET …/api/oparl/meetings/ | Sitzungen, nur öffentlich, Punkte des öffentlichen Teils eingebettet |
GET …/api/oparl/papers/ | Vorlagen, nur öffentlich, mainFile, auxiliaryFile und consultation eingebettet |
GET …/api/oparl/memberships/, …/agendaitems/, …/consultations/, …/files/, …/legislativeterms/ | weitere Listen gemäß OParl 1.1 |
GET …/api/oparl/<typ>/<uuid>/ | Objekt-Endpunkte aller Typen |
GET …/api/oparl/file/<uuid>/download/ | Anonymer Datei-Abruf öffentlicher Anlagen, ?download=1 für Attachment |
Objekttypen für <typ>: organization, person, membership, meeting, agendaitem, paper, consultation, file, legislativeterm.
Paper.mainFile ist die älteste öffentliche Anlage der Vorlage, alle weiteren erscheinen unter auxiliaryFile.
Abstimmungsergebnisse¶
Öffentliche Tagesordnungspunkte mit Ergebnis tragen zusätzlich zu result und resolutionText zwei Vendor-Felder:
mandari:vote: Summen mitmethod,methodLabel,result,resultLabel,yes,no,abstainmandari:rollCall: nur bei namentlicher Abstimmung eine Liste ausname,vote,voteLabel, inklusive Befangenheit alsexcluded
Offen erfasste, geheime oder nur summierte Abstimmungen liefern nie Einzelstimmen. Die Aggregations-API des Bürgerportals reicht beide Felder durch, die Sitzungsseite im Portal zeigt Summen und aufklappbar die namentlichen Stimmen.
Beratungsfolge¶
Die Beratungsfolge wird standardkonform als Consultation ausgeliefert: paper, organization, meeting und agendaItem (sobald terminiert und öffentlich), role (Vorberatung, Anhörung, Entscheidung, Kenntnisnahme) und authoritative für die entscheidende Station.
Pagination und Zeitfilter¶
Wie beim Aggregator: OParl-Listen-Envelope mit data, pagination und links, echte links.next-URLs, HTTP-Link-Header, 100 Objekte pro Seite, Sortierung nach modified aufsteigend.
Alle Listen unterstützen created_since, created_until, modified_since und modified_until. Zeitstempel müssen eine explizite Zeitzone enthalten, sonst antwortet die API mit HTTP 400. Das + in URLs als %2B kodieren.
Gelöschte und entöffentlichte Objekte (Tombstones)¶
Objekte, die einmal öffentlich ausgeliefert wurden und danach gelöscht oder auf nicht-öffentlich gestellt werden, hinterlassen einen Tombstone:
- Objekt-Endpunkte liefern weiterhin HTTP 200 mit dem gekürzten Objekt (
id,type,created,modified,deleted: true).modifiedist der Löschzeitpunkt, Inhalte entfallen vollständig. - Listen ohne Filter enthalten keine Tombstones.
- Listen mit
modified_sinceenthalten passende Tombstones, damit inkrementelle Clients Löschungen zuverlässig mitbekommen. - Wird ein Objekt wieder veröffentlicht, verschwindet der Tombstone und das Vollobjekt ist wieder abrufbar.
- Der Wechsel von öffentlich auf nicht-öffentlich kaskadiert: Eine entöffentlichte Sitzung hinterlässt auch Tombstones für ihre öffentlichen Punkte und Anlagen, eine entöffentlichte Vorlage für ihre Anlagen und Beratungsstationen.
Konsumenten¶
Ein generischer OParl-Client kann eine Kommune vollständig und inkrementell spiegeln. Der wichtigste Konsument ist das mandari-Bürgerportal selbst, siehe Veröffentlichung im Bürgerportal.
Betrieb¶
Die IDs der API werden aus dem Host der Anfrage gebaut. Die API funktioniert damit unter jedem konfigurierten Host ohne weitere Einstellung. Seitengröße und Rate-Limit teilen sich die Variablen OPARL_API_PAGE_SIZE und OPARL_API_RATE_LIMIT mit der Aggregations-API, siehe Konfiguration.