I want to try to reimplement pyxivapi in Julia, which is client for XIVAPI REST API. But I don’t know how to write the Julia APIs that looks like Julia library. Julia feels very different than other programming languages that I used. Is there a guide on how to design API for Julia?
Several more concrete questions:
Lets say I want to rewrite this code in Julia:
client = pyxivapi.XIVAPIClient(api_key="your_key_here")
item = client.index_by_id(
index="Item",
content_id=23575,
columns=["ID", "Name", "Icon", "ItemUICategory.Name"],
language="de"
)
First question:
Can I write the index_by_id in client.index_by_id style or index_by_id(client,...) better? For the second style, do client go first in the arguments, or it go in the last?
Second question:
There is a language optional argument in that function. XIVAPI accepts jp,en,de,fr. I can implement it in Julia in several ways:
-
Keep it that way, use string comparison
language = "de" -
Use
:instead,Plots.jlis like thatlanguage = :de -
Define an enum and set
languageargument type as that enum@enum Language begin jp en de fr end index_by_id(language::Language = en) -
Make a
Languageabstract type, then make those languages as concrete typeabstract type Language end struct Jp <: Language end struct En <: Language end struct De <: Language end struct Fr <: Language end function index_by_id(lang::Type{T}) where T <: Language ... end
Which one looks more Julian? Which one is faster? And which one can autocomplete in REPL or VS Code?