0Pricing
Elixir & Phoenix: Scalable Backend Development · บทเรียน

การแบ่งหน้า การกรอง และการกำหนดรุ่น API

ทำให้ API ของ Phoenix รองรับการขยายและดูแลรักษาได้ง่ายด้วยการแบ่งหน้าผลลัพธ์จากคำค้น การกรองที่ยืดหยุ่น และแนวทางกำหนดรุ่นอย่างเป็นระบบ

การแบ่งหน้า การกรอง และการกำหนดรุ่น API เป็นบทเรียน Elixir & Phoenix: Scalable Backend Development ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Elixir & Phoenix: Scalable Backend Development และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Elixir & Phoenix: Scalable Backend Development มีบทเรียนทั้งหมด 4 บทเรียน

บางส่วนของบทเรียนนี้ยังไม่ได้รับการแปล และแสดงเป็นภาษาอังกฤษ

Why Pagination Matters

Returning every record in one response is slow and memory-heavy. Pagination sends data in manageable pages.

Offset-Based Pagination

The classic approach uses limit and offset driven by query params like ?page=2&per_page=20.

from(p in Post, limit: ^per_page, offset: ^((page - 1) * per_page))

Returning Page Metadata

Clients need to know totals. Include metadata such as current page, page size, and total count alongside the data.

%{
  data: posts,
  meta: %{page: 2, per_page: 20, total: 137}
}

The Downside of Offset

Large offsets get slow because the database still scans skipped rows, and rows shifting between requests cause duplicates.

Cursor-Based Pagination

Cursor pagination uses the last seen value (often an id or timestamp) to fetch the next page, staying fast and stable.

from(p in Post,
  where: p.id > ^cursor,
  order_by: [asc: p.id],
  limit: ^limit)

Filtering Results

Let clients narrow results with query params. Build the query conditionally based on which params are present.

def filter(query, %{"status" => status}) do
  from(q in query, where: q.status == ^status)
end
def filter(query, _), do: query

Composing Multiple Filters

Reduce over a params map to apply each supported filter, keeping the query composable and safe from injection via parameter binding.

Enum.reduce(params, base_query, fn
  {"author", a}, q -> from(p in q, where: p.author == ^a)
  _, q -> q
end)

Sorting

Accept a sort param and map it to a safe whitelist of allowed columns to avoid arbitrary ordering.

order = case params["sort"] do
  "newest" -> [desc: :inserted_at]
  _ -> [asc: :id]
end

Why Version Your API?

Versioning lets you evolve the API without breaking existing clients when you change response shapes or behavior.

URL Path Versioning

The most common strategy puts the version in the path, scoped in the router.

scope "/api/v1", MyAppWeb.V1 do
  pipe_through :api
  resources "/posts", PostController
end

Header-Based Versioning

Alternatively, select the version from an Accept header so URLs stay stable. Choose ONE strategy and stay consistent.

# Accept: application/vnd.myapp.v2+json

Quick Check

Test your API scaling knowledge.

Recap

You made APIs scalable and durable:

  • Paginate with offset (simple) or cursor (fast, stable)
  • Return page metadata with the data
  • Apply composable, parameter-bound filters and whitelisted sorting
  • Version via URL path or Accept header, consistently

คำถามที่พบบ่อย

บทเรียน “การแบ่งหน้า การกรอง และการกำหนดรุ่น API” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การแบ่งหน้า การกรอง และการกำหนดรุ่น API” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Elixir & Phoenix: Scalable Backend Development ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Elixir & Phoenix: Scalable Backend Development มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การแบ่งหน้า การกรอง และการกำหนดรุ่น API”

ทำให้ API ของ Phoenix รองรับการขยายและดูแลรักษาได้ง่ายด้วยการแบ่งหน้าผลลัพธ์จากคำค้น การกรองที่ยืดหยุ่น และแนวทางกำหนดรุ่นอย่างเป็นระบบ คุณปฏิบัติ Elixir & Phoenix: Scalable Backend Development ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Elixir & Phoenix: Scalable Backend Development หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Elixir & Phoenix: Scalable Backend Development บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “การแบ่งหน้า การกรอง และการกำหนดรุ่น API” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Elixir & Phoenix: Scalable Backend Development นี้ได้ไหม

ได้ บทเรียน Elixir & Phoenix: Scalable Backend Development ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. หลักการและแนวทางปฏิบัติที่ดีในการออกแบบ API
  2. การนำจุดปลายทาง API และการทำอนุกรมมาใช้
  3. กลยุทธ์การยืนยันตัวตนและการอนุญาต
  4. การแบ่งหน้า การกรอง และการกำหนดรุ่น API
← กลับไปที่ Elixir & Phoenix: Scalable Backend Development