2019-05-02 09:29:43 +00:00
|
|
|
% my $api_root = $self->url_for('/api/v1')->to_abs->scheme('https');
|
|
|
|
% my $token = {};
|
|
|
|
% my $uid;
|
|
|
|
% if (is_user_authenticated()) {
|
|
|
|
% $uid = current_user()->{id};
|
|
|
|
% $token = get_api_token();
|
|
|
|
% }
|
|
|
|
|
|
|
|
<h1>API</h1>
|
|
|
|
|
|
|
|
<div class="row">
|
|
|
|
<div class="col s12">
|
|
|
|
Die folgenden API-Endpunkte werden aktuell unterstützt.
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<h2>Status</h2>
|
|
|
|
<div class="row">
|
|
|
|
<div class="col s12">
|
|
|
|
<p style="font-family: Monospace;">
|
|
|
|
% if ($token->{status}) {
|
|
|
|
curl <%= $api_root %>/status/<%= $uid %>-<%= $token->{status} // 'TOKEN' %>
|
|
|
|
% }
|
|
|
|
% else {
|
|
|
|
curl <%= $api_root %>/status/TOKEN
|
|
|
|
% }
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Beispiel / Layout:
|
|
|
|
</p>
|
|
|
|
<p style="font-family: Monospace;">
|
|
|
|
{<br/>
|
|
|
|
"deprecated" : true / false, (falls true: Diese API-Version wird irgendwann abgeschaltet, bitte auf eine neue umsteigen)<br/>
|
|
|
|
"checkedIn" : true / false,<br/>
|
|
|
|
"fromStation" : { (letzter Checkin)<br/>
|
|
|
|
"name" : "Essen Hbf",<br/>
|
|
|
|
"ds100" : "EE",<br/>
|
|
|
|
"uic" : 8000098,<br/>
|
|
|
|
"latitude" : 51.451355,<br/>
|
|
|
|
"longitude" : 7.014793,<br/>
|
|
|
|
"scheduledTime": 1556083680,<br/>
|
|
|
|
"realTime": 1556083680,<br/>
|
|
|
|
},<br/>
|
2019-12-14 19:46:02 +00:00
|
|
|
"toStation" : { (zugehöriger Checkout. Wenn noch nicht eingetragen, sind alle Felder null)<br/>
|
2019-05-02 09:29:43 +00:00
|
|
|
"name" : "Essen Stadtwald",<br/>
|
|
|
|
"ds100" : "EESA",<br/>
|
|
|
|
"uic" : 8001896,<br/>
|
|
|
|
"latitude" : 51.422853,<br/>
|
|
|
|
"longitude" : 7.023296,<br/>
|
|
|
|
"scheduledTime": 1556083980, (ggf. null)<br/>
|
|
|
|
"realTime": 1556083980, (ggf. null)<br/>
|
|
|
|
},<br/>
|
|
|
|
"train" : {<br/>
|
|
|
|
"type" : "S", (aktueller / letzter Zugtyp)<br/>
|
|
|
|
"line" : "6", (Linie als String, nicht immer numerisch, ggf. null)<br/>
|
|
|
|
"no" : "30634", (Zugnummer als String)<br/>
|
|
|
|
"id" : "7512500863736016593", (IRIS-spezifische Zug-ID)<br/>
|
|
|
|
},<br/>
|
|
|
|
"actionTime" : 1234567, (UNIX-Timestamp des letzten Checkin/Checkout)<br/>
|
|
|
|
}
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Im Fehlerfall: <span style="font-family: Monospace;">{ "error" : "Begründung" }</span>
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
2019-12-14 20:53:23 +00:00
|
|
|
|
2019-12-17 19:46:17 +00:00
|
|
|
% if (app->mode eq 'development') {
|
|
|
|
|
2019-12-14 20:53:23 +00:00
|
|
|
<h2>Travel</h2>
|
2019-05-02 09:29:43 +00:00
|
|
|
<div class="row">
|
|
|
|
<div class="col s12">
|
|
|
|
<p>
|
2019-12-14 20:53:23 +00:00
|
|
|
Checkin per API. Sobald eine Zielstation bekannt ist, erfolgt der
|
|
|
|
Checkout wie beim Webinterface automatisch zehn Minuten nach Ankunft.
|
|
|
|
</p>
|
|
|
|
<p style="font-family: Monospace;">
|
|
|
|
curl -X POST -H "Content-Type: application/json" -d '{"token":"<%= $uid %>-<%= $token->{travel} // 'TOKEN' %>"}' <%= $api_root %>/travel
|
|
|
|
</p>
|
|
|
|
<p>Payload zum Einchecken, optional mit Zielwahl:</p>
|
|
|
|
<p style="font-family: Monospace;">
|
|
|
|
{<br/>
|
2019-12-17 19:01:39 +00:00
|
|
|
"token" : "<%= $uid %>-<%= $token->{travel} // 'TOKEN' %>",<br/>
|
2019-12-14 20:53:23 +00:00
|
|
|
"action" : "checkin",<br/>
|
|
|
|
"train" : {<br/>
|
|
|
|
"type" : "ICE",<br/>
|
|
|
|
"no" : "1234",<br/>
|
|
|
|
}<br/>
|
|
|
|
"fromStation" : "Essen Hbf", (DS100 oder EVA-Nummer sind ebenfalls möglich)<br/>
|
2019-12-14 22:46:36 +00:00
|
|
|
"toStation" : "Berlin Hbf", (optional, DS100 oder EVA-Nummer sind ebenfalls möglich)<br/>
|
|
|
|
"comment" : "Beliebiger Text" (optional)<br/>
|
2019-12-14 20:53:23 +00:00
|
|
|
}
|
|
|
|
</p>
|
|
|
|
<p>Payload zur Wahl eines neuen Ziels, wenn bereits eingecheckt:</p>
|
|
|
|
<p style="font-family: Monospace;">
|
|
|
|
{<br/>
|
2019-12-17 19:01:39 +00:00
|
|
|
"token" : "<%= $uid %>-<%= $token->{travel} // 'TOKEN' %>",<br/>
|
2019-12-14 20:53:23 +00:00
|
|
|
"action" : "checkout",<br/>
|
|
|
|
"force" : True/False, (wenn True: Checkout jetzt durchführen und auftretende Fehler ignorieren. Kann zu Logeinträgen ohne Ankunftsdaten führen.)<br/>
|
2019-12-14 22:46:36 +00:00
|
|
|
"toStation" : "Berlin Hbf", (DS100 oder EVA-Nummer sind ebenfalls möglich)<br/>
|
|
|
|
"comment" : "Beliebiger Text" (optional)<br/>
|
2019-12-14 20:53:23 +00:00
|
|
|
}
|
|
|
|
</p>
|
|
|
|
<p>Payload zum Rückgängigmachen eines Checkins (nur während der Fahrt möglich):</p>
|
|
|
|
<p style="font-family: Monospace;">
|
|
|
|
{<br/>
|
2019-12-17 19:01:39 +00:00
|
|
|
"token" : "<%= $uid %>-<%= $token->{travel} // 'TOKEN' %>",<br/>
|
2019-12-14 20:53:23 +00:00
|
|
|
"action" : "undo"<br/>
|
|
|
|
}
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Antwort bei Erfolg:
|
|
|
|
</p>
|
|
|
|
<p style="font-family: Monospace;">
|
|
|
|
{<br/>
|
|
|
|
"success" : True,<br/>
|
|
|
|
"status" : { aktueller Nutzerstatus gemäß Status-API }<br/>
|
|
|
|
}
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Antwort bei Fehler:
|
|
|
|
</p>
|
|
|
|
<p style="font-family: Monospace;">
|
|
|
|
{<br/>
|
|
|
|
"success" : False,<br/>
|
|
|
|
"error" : "Begründung",<br/>
|
|
|
|
"status" : { aktueller Nutzerstatus gemäß Status-API }<br/>
|
|
|
|
}
|
2019-05-02 09:29:43 +00:00
|
|
|
</p>
|
|
|
|
</div>
|
2019-12-14 20:53:23 +00:00
|
|
|
</div>
|
2019-05-02 09:29:43 +00:00
|
|
|
|
2019-12-14 20:53:23 +00:00
|
|
|
<h2>Import</h2>
|
2019-05-02 09:29:43 +00:00
|
|
|
<div class="row">
|
|
|
|
<div class="col s12">
|
|
|
|
<p>
|
2019-12-14 19:46:02 +00:00
|
|
|
Manueller Import vergangener Zugfahrten (eine Fahrt pro API-Aufruf).
|
|
|
|
</p>
|
|
|
|
<p style="font-family: Monospace;">
|
2019-12-17 19:01:39 +00:00
|
|
|
curl -X POST -H "Content-Type: application/json" -d '{"token":"<%= $uid %>-<%= $token->{import} // 'TOKEN' %>"}' <%= $api_root %>/import
|
2019-12-14 19:46:02 +00:00
|
|
|
</p>
|
|
|
|
<p>Payload (alle nicht als optional markierten Felder sind Pflicht):</p>
|
|
|
|
<p style="font-family: Monospace;">
|
|
|
|
{<br/>
|
2019-12-14 20:53:23 +00:00
|
|
|
"token" : "<%= $uid %>-<%= $token->{import} // 'TOKEN' %>",<br/>
|
2019-12-14 19:46:02 +00:00
|
|
|
"dryRun" : True/False, (optional: wenn True, wird die Eingabe validiert, aber keine Zugfahrt angelegt)<br/>
|
2019-12-17 19:01:39 +00:00
|
|
|
"lax" : True/Fals, (optional: wenn True, werden unbekannte Unterwegshalte akzeptiert)<br/>
|
2019-12-14 19:46:02 +00:00
|
|
|
"cancelled" : True/False, (Zugausfall?)<br/>
|
|
|
|
"train" : {<br/>
|
|
|
|
"type" : "S", (Zugtyp, z.B. ICE, RE, S)<br/>
|
|
|
|
"line" : "6", (Linie als String, bei Zügen ohne Linie wie IC/ICE u.ä. null)<br/>
|
|
|
|
"no" : "30634", (Zugnummer als String)<br/>
|
|
|
|
},<br/>
|
|
|
|
"fromStation" : { (Start / Checkin)<br/>
|
|
|
|
"name" : "Essen Hbf", (Name oder DS100)<br/>
|
|
|
|
"scheduledTime": 1556083680, (UNIX-Timestamp)<br/>
|
|
|
|
"realTime": 1556083680, (UNIX-Timestamp, optional, default == scheduledTime)<br/>
|
|
|
|
},<br/>
|
|
|
|
"toStation" : { (Ziel / Checkout)<br/>
|
|
|
|
"name" : "Essen Stadtwald", (Name oder DS100)<br/>
|
|
|
|
"scheduledTime": 1556083980, (UNIX-Timestamp)<br/>
|
|
|
|
"realTime": 1556083980, (UNIX-Timestamp, optional, default == scheduledTime)<br/>
|
|
|
|
},<br/>
|
|
|
|
"route" : [ (optionale Liste mit Unterwegshalten als Name oder DS100, darf keine Stationen vor Checkin oder nach Checkout beinhalten)<br/>
|
|
|
|
"Essen Hbf",<br/>
|
|
|
|
"Essen Süd",<br/>
|
|
|
|
"Essen Stadtwald"<br/>
|
|
|
|
],<br/>
|
|
|
|
"comment" : "Beliebiger Text" (optionaler Freitext-Kommentar)<br/>
|
|
|
|
}
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Antwort bei Erfolg (der Inhalt von "result" ist von dryRun unabhängig):
|
|
|
|
</p>
|
|
|
|
<p style="font-family: Monospace;">
|
|
|
|
{<br/>
|
|
|
|
"success" : True,<br/>
|
|
|
|
"id" : 1234, (ID der eingetragenen Zugfahrt)<br/>
|
2019-12-17 19:01:39 +00:00
|
|
|
"result" : { ... } (Eingetragene Daten, Datenformat nicht näher spezifiziert und beliebig variabel)<br/>
|
2019-12-14 19:46:02 +00:00
|
|
|
}
|
|
|
|
</p>
|
|
|
|
<p>
|
|
|
|
Antwort bei Fehler:
|
|
|
|
</p>
|
|
|
|
<p style="font-family: Monospace;">
|
|
|
|
{<br/>
|
|
|
|
"success" : False,<br/>
|
|
|
|
"error" : "Begründung"<br/>
|
|
|
|
}
|
2019-05-02 09:29:43 +00:00
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
2019-12-17 19:46:17 +00:00
|
|
|
|
|
|
|
% }
|