Sideinddeling, filtrering og API-versionering
Gør Phoenix-API'er skalerbare og nemme at vedligeholde med sideinddeling af forespørgsler, fleksibel filtrering og klare strategier for versionering.
Sideinddeling, filtrering og API-versionering er en gratis Elixir og Phoenix: Skalerbar backend-udvikling-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Elixir og Phoenix: Skalerbar backend-udvikling, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Elixir og Phoenix: Skalerbar backend-udvikling-kurset indeholder 4 lektioner i alt.
Hvorfor sideopdeling er vigtig
Det er langsomt og hukommelseskrævende at returnere alle poster i ét svar. Sideopdeling sender data i håndterbare sider.
Sideopdeling baseret på forskydning
Den klassiske tilgang bruger limit og offset, styret af forespørgselsparametre som ?page=2&per_page=20.
from(p in Post, limit: ^per_page, offset: ^((page - 1) * per_page))Returnering af sidemetadata
Klienter har brug for at kende totalerne. Medtag metadata som aktuel side, sidestørrelse og samlet antal sammen med dataene.
%{
data: posts,
meta: %{page: 2, per_page: 20, total: 137}
}Ulempen ved offset
Store offsets bliver langsomme, fordi databasen stadig gennemgår de oversprungne rækker, og rækker, der flytter sig mellem forespørgsler, kan føre til dubletter.
Cursor-baseret sideopdeling
Cursor-sideopdeling bruger den senest sete værdi (ofte et id eller et tidsstempel) til at hente den næste side, så den forbliver hurtig og stabil.
from(p in Post,
where: p.id > ^cursor,
order_by: [asc: p.id],
limit: ^limit)Filtrering af resultater
Lad klienter indsnævre resultaterne med forespørgselsparametre. Opbyg forespørgslen betinget ud fra, hvilke parametre der findes.
def filter(query, %{"status" => status}) do
from(q in query, where: q.status == ^status)
end
def filter(query, _), do: querySammensætning af flere filtre
Brug reduce over et parametrekort for at anvende hvert understøttet filter, så forespørgslen kan sammensættes og er beskyttet mod injektion via parameterbinding.
Enum.reduce(params, base_query, fn
{"author", a}, q -> from(p in q, where: p.author == ^a)
_, q -> q
end)Sortering
Accepter en sort-parameter, og map den til en sikker hvidliste over tilladte kolonner for at undgå vilkårlig sortering.
order = case params["sort"] do
"newest" -> [desc: :inserted_at]
_ -> [asc: :id]
endHvorfor versionere din API?
Versionering lader dig videreudvikle API'et uden at ødelægge eksisterende klienter, når du ændrer svarenes struktur eller adfærd.
Versionering i URL-stien
Den mest almindelige strategi placerer versionen i stien, begrænset i routeren.
scope "/api/v1", MyAppWeb.V1 do
pipe_through :api
resources "/posts", PostController
endVersionering baseret på header
Alternativt kan du vælge versionen fra en Accept-header, så URL'er forbliver stabile. Vælg ÉN strategi, og vær konsekvent.
# Accept: application/vnd.myapp.v2+jsonHurtigt tjek
Test din viden om skalering af API'er.
Opsummering
Du gjorde API'er skalerbare og robuste:
- Brug sideopdeling med offset (enkelt) eller cursor (hurtig og stabil)
- Returnér sidens metadata sammen med dataene
- Anvend sammensættelige, parameterbundne filtre og hvidlistet sortering
- Versionér via URL-sti eller Accept-header, konsekvent
Lær Elixir med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Sideinddeling, filtrering og API-versionering” gratis?
Ja — hele teksten til “Sideinddeling, filtrering og API-versionering” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Elixir og Phoenix: Skalerbar backend-udvikling-kurset, skal du opgradere til CoddyKit PRO. Elixir og Phoenix: Skalerbar backend-udvikling-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Sideinddeling, filtrering og API-versionering”?
Gør Phoenix-API'er skalerbare og nemme at vedligeholde med sideinddeling af forespørgsler, fleksibel filtrering og klare strategier for versionering. Du øver dig i Elixir og Phoenix: Skalerbar backend-udvikling med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Elixir og Phoenix: Skalerbar backend-udvikling?
Der kræves ingen tidligere erfaring. Elixir og Phoenix: Skalerbar backend-udvikling på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Sideinddeling, filtrering og API-versionering”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Elixir og Phoenix: Skalerbar backend-udvikling-lektion?
Ja. Alle Elixir og Phoenix: Skalerbar backend-udvikling-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Principper og bedste praksis for API-design
- Implementering af API-endpoints og serialisering
- Strategier for godkendelse og autorisation
- Sideinddeling, filtrering og API-versionering