Elixir og Phoenix: Skalerbar backend-udvikling · Lektion

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.

Lektion 4 af 413 trin

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: query

Sammensæ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]
end

Hvorfor 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
end

Versionering 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+json

Hurtigt 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
Gratis at komme i gang

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

  1. Principper og bedste praksis for API-design
  2. Implementering af API-endpoints og serialisering
  3. Strategier for godkendelse og autorisation
  4. Sideinddeling, filtrering og API-versionering
← Tilbage til Elixir og Phoenix: Skalerbar backend-udvikling