Hallo,
da es derzeit keine wirkliche Alternative zur bestehenden GUID <=> SteamID API(https://converter.multivitamin.wtf/v2/) gibt, habe ich mir gedacht, dass es Zeit für eine wird.
Da die technischen Details und die Umsetzung die Meisten eh nicht interessiert, hier erstmal die Nutzung der API:
GET https://converter.ghtool.de/v1/<GUID/SteamID64>
Beispiel:
GET https://converter.ghtool.de/v1/b14087720a00836070bc4e85229eb73c
{
"error":false,
"data":[
{
"src":"b14087720a00836070bc4e85229eb73c",
"guid":"b14087720a00836070bc4e85229eb73c",
"steamid":"76561197976968076"
}]
}
Alles anzeigen
Was dabei auffallen sollte ist, dass die Response fast gleich zu der bestehenden API ist, dies ermöglicht einen leichten Umstieg.
Soweit war es das auch schon zur Nutzung der API, es gibt auch keine Massennutzung über einen POST Request.
Technische Umsetzung und Details:
Was natürlich logisch sein sollte ist, dass die API im Hintergrund eine Datenbank braucht, die mit GUID => SteamId befüllt ist. Diese wird während ich diesen Beitrag schreibe immer weiter gefüllt.(Derzeit ist die Datenbank bei ~200Mio Einträgen)
Die Datenbank ist eine Postgresql Datenbank.
Das Interessante ist aber eher die Umsetzung des Ganzen:
Hier ein kleiner Ablauf des Ganzen:
SteamID:
- Umwandlung zur Guid
- Prüfen ob in Cache vorhanden
- Wenn nicht vorhanden, dann in Cache schreiben
Guid:
- Prüfen ob in Cache vorhanden
- Wenn nicht:
- Prüfen ob in der Db vorhanden
- Wenn nicht
- Anfrage an die (https://converter.multivitamin.wtf/v2/) API
- Wenn dort nicht vorhanden, Fehler ausgeben, dass die SteamID nicht gefunden wurde.
Der Cache ist aber das einzig interessante an der Umsetzung:
Da derzeit nach SteamSpy Arma3 ~2-5Mio mal verkauft wurde, ist ein Cache auf einem anderen Datenbankserver Sinnvoll, heißt eine GUID muss nur einmalig von der "großen" Datenbank abgefragt werden und wird dann in die Cache Tabelle eines anderen Servers geschrieben(mein derzeit Main Db Server). Dadurch ist die Standard Antwortzeit der API bei ~20ms, bei einer Guid die nicht im Cache ist ~500ms.
Wenn noch Fragen aufkommen, könnt Ihr diese natürlich gerne stellen.
Die API darf von jedem genutzt werden.
Es gibt theoretisch keine Rate Limits.
Grüße
Florian