FFXIVAPI is a simple, fast and feature-incomplete REST API for FFXIV service which works on top of the information provided by the Lodestone, by parsing the HTML output and converting it into JSON models.
FFXIVAPI is aggresive and heavily parallelizes requests to the Lodestone when possible, to minimize the already big latency the aforementioned service has. Typically, it can retrieve character data and the full list of achievements in about 5 seconds:
curl localhost:8080/character/31688528\?achievements\=yes 0.03s user 0.00s system 0% cpu 4.998 total
Additionally, FFXIVAPI features an in-memory caching service to prevent multiple requests to spam heavily the Lodestone, which would not only be unpolite, but also increase the chance of getting 429'd and consequently increasing latency as well. Caching has mechanism has been engineered specifically for the long-latency lodestone requests.
API documentation is available as a Swagger spec and is made available through the API itself in the root (/
) path (assuming the binary is executed in the root source directory.
If you'd like to see more endpoints, feel free to drop a PR or a feature request issue.
Minimal configuration is possible with environment variables:
PORT
: The port to which the HTTP server will bind itself into- Additionally, it is possible to configure the full address by passing an address string (e.g.
10.0.0.100:8088
) as the argument to the binary.PORT
has priority over the address specified this way.
- Additionally, it is possible to configure the full address by passing an address string (e.g.
FFXIVAPI_LOGLVL
: Log level, as defined in logrusFFXIVAPI_REGION
: Lodestone region to query. Should beeu
,na
, orjp
FFXIVAPI_SERVER
: Custom HTTP server to query, instead of the lodestone (eu.finalfantasyxiv.com
). Useful to proxy/cache the lodestone server externally.FFXIVAPI_NOCACHE
: Disable ffxivapi's internal caching mechanism (tcache). Useful if using an externalFFXIVAPI_SERVER
which already performs caching
A Dockerfile and an alpine-based docker image are provided for easy deployment.
Additionally, a kubernetes yaml can also be found on the root of this repo.
Currently supported endpoints are:
[
{
"ID": 31688528,
"Level": 63,
"Avatar": "https://img2.finalfantasyxiv.com/f/7eb4d62ddd701b2fc5cc06fc773187e9_40d57ba713628f3f1ef5ef204b6d76d2fc0_96x96.jpg?1601561213",
"Lang": "EN",
"Name": "Roobre Shiram",
"World": "Ragnarok (Chaos)"
}
]
{
"ParsedAt": "2020-09-28T14:21:56.403712609Z",
"ID": 31688528,
"World": "Ragnarok (Chaos)",
"Avatar": "https://img2.finalfantasyxiv.com/f/7eb4d62ddd701b2fc5cc06fc773187e9_40d57ba713628f3f1ef5ef204b6d76d2fc0_96x96.jpg?1601301983",
"Portrait": "https://img2.finalfantasyxiv.com/f/7eb4d62ddd701b2fc5cc06fc773187e9_40d57ba713628f3f1ef5ef204b6d76d2fl0_640x873.jpg?1601301983",
"Name": "Roobre Shiram",
"Nameday": "22nd Sun of the 5th Astral Moon",
"City": "Gridania",
"GC": {
"Name": "Order of the Twin Adder",
"Rank": "Chief Serpent Sergeant"
},
"FC": {
"ID": "9237023573225362244",
"Name": "Chupipandi"
},
"Achievements": [
{
"ID": 1158,
"Name": "Freebird: Dravanian Forelands",
"Obtained": "2020-09-27T22:16:53Z"
},
{
"ID": 1209,
"Name": "Mapping the Realm: Sohm Al",
"Obtained": "2020-09-27T22:16:53Z"
},
"// Truncated for readability"
],
"ClassJobs": [
{
"Name": "Ninja",
"Level": 62,
"Exp": 0,
"ExpNext": 0
}
]
}
Avatar redirections are cached for 30 minutes.