Välkommen till Trafiklab:s användare- och supportforum! Ställ frågor, rapportera problem och hjälp oss med förslag och idéer!
Vid felrapporter ber vi dig inkludera exakt API-namn och om möjligt ett exempelanrop för att underlätta felsökningen. Glöm inte att ta bort din API-nyckel när du delar ditt exempelanrop.
Undrar du hur du får tillgäng Trafiklabs data? Läs vår introduktion här: https://www.trafiklab.se/hur-gor-jag
Welcome to Trafiklab's user and supportforum. Ask questions, report issues and help us improve with suggestions and ideas!
If you open a new issue, please always include the exact API you're talking about, and, if applicable, include a sample request so we can check if contains the right parameters. Don't forget to remove your API keys when sharing example requests.
Välkommen till Trafiklab:s kund- och supportforum! Ställ frågor, rapportera problem och hjälp oss med förslag och idéer!
https://transport.integration.sl.se/v1/sites/9191/departures
När jag nu går in på länken ser jag aktuella avgångar. Är felet kvar för dig?
Hälsningar,
Bert
https://transport.integration.sl.se/v1/sites/9307/departures?transport=METRO
Så får jag följande information tillbaka i headers:
Content-Type: application/json; charset=UTF-8; indent="false"
Transfer-Encoding: chunked
Connection: keep-alive
Date: Tue, 06 May 2025 09:30:37 GMT
x-correlation-id: c4ecb390-2a5c-11f0-9ed3-8a5313954e64
Content-Encoding: gzip
Vary: Accept-Encoding
Vary: Origin
X-Cache: Hit from cloudfront
Via: 1.1 269b0fad85dfd450220cf6573a2d384e.cloudfront.net (CloudFront)
X-Amz-Cf-Pop: ARN56-P2
X-Amz-Cf-Id: WnbxYx0Vkg7pvnNz9AGNm56ttMZVIWI__MH726GDT805sUaDeDg3FA==
Age: 2941
Titta speciellt på X-Cache, Date och Age, vilket visar att resultatet felaktigt cache'as och gör det oanvändbart. Helt OK att de andra API'erna frontas av ett CDN som Cloudfront, men "departures" måste gå direkt för att gå och använda.
När jag går in på länken är samtliga avgångar från tidigare idag (11-tiden). Testa att gå in nu igen och se om avgångarna fastnat för dig med.
Mvh
https://transport.integration.sl.se/v1/sites/9191/departures
Returnerar cache'ad information från "Tue, 06 May 2025 11:07:46 GMT" enligt mig och headern jag kan se via Postman (och kod). Trafiklab har satt ett CDN/Cache (AWS Cloudfront) framför API'erna som felaktigt cache'ar data från departures. I alla fall är det så jag förstår det.
Tack för återkopplingen, det bekräftar att olika användare får olika resultat från cachen. Själv får jag nu resultat från 12:40-tiden. Cachen sak finnas för att inte överbelasta tjänsten, men cachen ska inte spara resultat i mer än 60-120 sekunder (så age-headern bör inte överstiga 60-120 i vanliga fall).
Cachen är del av SLs API, det är inget vi kan styra. Vi återkopplar detta till SL så att de kan åtgärda felet.
Hälsningar,
Bert
Tex. första anropet till
https://transport.integration.sl.se/v1/sites/9191/departures?forecast=59
Gav mig header'n:
X-Cache: Miss from cloudfront
Men andra försöket säger istället:
X-Cache: Hit from cloudfront
Age: 140
Vilket betyder att informationen cahe'ats i 140s av Cloudfront.
Trafiklab måste stänga av Cache för anrop till:
https://transport.integration.sl.se/v1/sites/{{site}}/departures
... helt och hållet eller hålla cachen väldigt kort tid, typ 5 sekunder.
Förstår varför ni har en cache, men på ett API som talar om utifall ett tåg kommer om 1 minut, så kan inte cachen vara längre än så?!?! Cach-tiden måste vara kortare om API'et skall vara användbart. Annars kommer det ibland stå:
"Linje 10 Kungsträdgården avgår om 2 minuter", fastän tåget står på perongen.
Jag cachar saker på min sida där jag har mer kontroll och vet när jag måste hämta ny information.
Med tankte på att problemet också drabbar skyltarna i tunnelbanan och SLs egen app så kan man ju hoppas att de hittar hit så det kan lösa problemet själva också. ;-)
Jag har läst på dokumentationen för AWS CloudFront och tror att fixen skulle vara väldigt enkel att implementera med ett kort skript som ändrar Time To Live, TTL, till 5 sekunder (gärna kortare för mig) för alla anrop som matchar mönstret:
https://transport.integration.sl.se/v1/sites/*/departures
När jag ber ChatGPT att skapa ett sådant får jag följande skript som SL då borde titta på och exekvera om dom tycker det stämmer. Jag har som sagt var inte testat det, så använd på egen risk.
(Dokumentation hittas här https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesPathPattern)
# 1. Set your variables
DIST_ID="YOUR_DISTRIBUTION_ID"
ORIGIN_ID="YOUR_ORIGIN_ID"
# 2. Get current config with ETag
aws cloudfront get-distribution-config --id "$DIST_ID" > config.json
ETAG=$(jq -r '.ETag' config.json)
jq '.DistributionConfig' config.json > dist-config.json
# 3. Add the new cache behavior (this replaces dist-config.json with the modified version)
jq '
.CacheBehaviors.Items += [{
PathPattern: "/v1/sites/*/departures",
TargetOriginId: "'$ORIGIN_ID'",
ForwardedValues: {
QueryString: true,
Cookies: { Forward: "none" },
Headers: [],
QueryStringCacheKeys: []
},
TrustedSigners: { Enabled: false, Quantity: 0 },
ViewerProtocolPolicy: "allow-all",
MinTTL: 5,
DefaultTTL: 5,
MaxTTL: 5,
Compress: true,
SmoothStreaming: false,
AllowedMethods: {
Quantity: 2,
Items: ["GET", "HEAD"],
CachedMethods: {
Quantity: 2,
Items: ["GET", "HEAD"]
}
},
LambdaFunctionAssociations: {
Quantity: 0,
Items: []
},
FunctionAssociations: {
Quantity: 0,
Items: []
},
FieldLevelEncryptionId: ""
}]
| .CacheBehaviors.Quantity += 1
' dist-config.json > new-dist-config.json
# 4. Update the distribution
aws cloudfront update-distribution \
--id "$DIST_ID" \
--if-match "$ETAG" \
--distribution-config file://new-dist-config.json
Problemet orsakades av en uppdatering för hela API:et, där departures-endpointen fick en felaktig konfiguration. Det ska vara uppdaterat sen en ungefär en timme sen, nu ska endpointen inte längre ha någon cache över huvud taget enligt vad jag har förstått från SL. Cloudfront headers finns kvar, men kommer rapportera en miss.
Hälsningar,
Bert
Jag kan bekräfta att följande API nu inte längre returnerar cache'ad information, vilket är precis vad som behövs:
/v1/sites/{siteId}/departures
Nedanstående API returnerar numera också ej cache'ad information, vilket inte skadar användare av API'et men kanske skapar onödig påfrestning på backend, då "sites" troligtvis inte ändras ofta alls så borde kunna vara kvar i cache. Men som sagt var inte ett problem för användare.
/v1/sites
De kvarvarande API'erna returnerar cache'ad information vilket är helt OK.
/v1/lines
/v1/stop-points
/v1/transport-authorities
Tack för att du hålt oss uppdaterade,
-Kristofer