Elixir ja Phoenix: skaalautuva backend-kehitys · Oppitunti

API-päätepisteiden ja serialisoinnin toteuttaminen

Rakentakaa API-päätepisteitä, käsitelkää pyyntö- ja vastausrungot sekä serialisoikaa tiedot tehokkaasti asiakassovellusten käyttöön.

Oppitunti 2/411 vaihetta

API-päätepisteiden ja serialisoinnin toteuttaminen on ilmainen Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Elixir ja Phoenix: skaalautuva backend-kehitys-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Elixir ja Phoenix: skaalautuva backend-kehitys-kurssilla on yhteensä 4 oppituntia.

API-päätepisteet: perusteet

Tervetuloa! Tällä oppitunnilla rakennamme API-päätepisteitä Phoenixilla. API-päätepiste on tietty URL-osoite, jota API-asiakas voi käyttää toiminnon suorittamiseen tai datan hakemiseen.

Ajatelkaa sitä tietyn resurssin digitaalisena osoitteena, kuten /api/products tai /api/users/123. Jokainen päätepiste vastaa yleensä jotakin toimintoa (esimerkiksi kaikkien tuotteiden hakemista tai uuden käyttäjän luomista).

API-resurssin luonti generaattorilla

Phoenix tarjoaa kätevän generaattorin RESTful API -resurssin nopeaan perustamiseen. Käytämme komentoa mix phx.gen.json Product-resurssin luomiseen.

Tämä komento luo:

  • Reititintiedon
  • Ohjaimen (esimerkiksi ProductController)
  • Ecto-skeeman (esimerkiksi Product)
  • Näkymän (esimerkiksi ProductView) JSON-sarjallistamista varten

mix phx.gen.json Products Product products name:string description:text price:decimal

API-ohjain: luettelointi ja näyttäminen

Luomisen jälkeen tarkastellaan yksinkertaista API-ohjainta. index-toiminto käsittelee pyynnön GET /products kaikkien tuotteiden luettelemiseksi. show-toiminto käsittelee pyynnön GET /products/:id yksittäisen tuotteen näyttämiseksi.

Phoenix-ohjaimet käyttävät conn-yhteyttä pyyntöjen ja vastausten hallintaan. Haemme datan ja renderöimme sen sitten JSON-muodossa.

defmodule MyAppWeb.ProductController do
  use MyAppWeb, :controller
  alias MyApp.Products
  alias MyApp.Products.Product

  action_fallback MyAppWeb.FallbackController

  def index(conn, _params) do
    products = Products.list_products()
    render(conn, :index, products: products)
  end

  def show(conn, %{"id" => id}) do
    product = Products.get_product!(id)
    render(conn, :show, product: product)
  end
end

Pyyntöjen sisältöjen käsittely: luominen

Kun asiakas lähettää dataa uuden resurssin luomiseksi (esimerkiksi POST /products), data on pyynnön sisällössä. Phoenix tarjoaa tämän datan käyttöön conn.body_params-kentässä.

Välitämme datan yleensä Ecto Changesetille validointia varten ja lisäämme sen sitten tietokantaan. Onnistuneessa tapauksessa vastaamme juuri luodulla resurssilla; muussa tapauksessa lähetämme virheen.

Koodi: `create`-toiminto

Tässä on yksinkertaistettu create-toiminto. Huomaatte, kuinka käytämme conn.body_params-kenttää ja renderöimme sitten tuloksen. (Oikeassa sovelluksessa create_product sisältäisi Changeset- ja Ecto Repo -kutsuja.)

Yrittäkää ymmärtää, miten uusi tuote renderöidään takaisin asiakkaalle.

defmodule MyAppWeb.ProductController do
  use MyAppWeb, :controller
  alias MyApp.Products
  alias MyApp.Products.Product

  # ... other actions ...

  def create(conn, %{"product" => product_params}) do
    case Products.create_product(product_params) do
      {:ok, product} ->
        conn
        |> put_status(:created)
        |> render(:show, product: product)
      {:error, %Ecto.Changeset{} = changeset} ->
        conn
        |> put_status(:unprocessable_entity)
        |> render(MyAppWeb.ChangesetView, "error.json", changeset: changeset)
    end
  end

  # Dummy function for runnable code
  defp create_product(params) do
    # In a real app, this would save to DB with Ecto.Changeset
    # For demo, just return a dummy product
    product = %Product{id: 1, name: params["name"], price: params["price"], description: params["description"]}
    {:ok, product}
  end

  # For runnable context
  defmodule Product do
    defstruct [:id, :name, :price, :description]
  end
end

Pyyntöjen sisältöjen käsittely: päivittäminen

update-toiminto käsittelee PUT- tai PATCH-pyyntöjä olemassa olevan resurssin muokkaamiseksi (esimerkiksi PUT /products/:id). Se muistuttaa create-toimintoa, mutta ensin haette olemassa olevan resurssin.

Päivitetty data löytyy myös conn.body_params-kentästä. Resurssin validoinnin ja päivityksen jälkeen palautatte yleensä päivitetyn resurssin tai virheen.

defmodule MyAppWeb.ProductController do
  use MyAppWeb, :controller
  alias MyApp.Products
  alias MyApp.Products.Product

  # ... other actions ...

  def update(conn, %{"id" => id, "product" => product_params}) do
    product = Products.get_product!(id)

    case Products.update_product(product, product_params) do
      {:ok, product} ->
        render(conn, :show, product: product)
      {:error, %Ecto.Changeset{} = changeset} ->
        conn
        |> put_status(:unprocessable_entity)
        |> render(MyAppWeb.ChangesetView, "error.json", changeset: changeset)
    end
  end

  # Dummy functions for runnable context
  defp get_product!(id), do: %Product{id: String.to_integer(id), name: "Old Name", price: "10.0", description: "Old Description"}
  defp update_product(product, params) do
    updated_product = %{product | name: Map.get(params, "name", product.name), price: Map.get(params, "price", product.price)}
    {:ok, updated_product}
  end

  defmodule Product do
    defstruct [:id, :name, :price, :description]
  end
end

Mitä sarjallistaminen tarkoittaa?

Sarjallistaminen tarkoittaa Elixirin tietorakenteiden (kuten structien tai karttojen) muuntamista muotoon, joka voidaan helposti siirtää verkon yli tai tallentaa. APIen yhteydessä tämä tarkoittaa yleensä Elixir-datan muuntamista JSON-muotoon (JavaScript Object Notation).

Miksi se on tärkeää? Sen ansiosta eri järjestelmät (Elixir-taustajärjestelmänne sekä mobiilisovellus tai verkkokäyttöliittymä) voivat ymmärtää dataa ja vaihtaa sitä johdonmukaisesti.

JSON-sarjallistamisen perusteet `render`-funktiolla

Phoenix käyttää näkymiä sarjallistamisen käsittelyyn. Kun kutsutte ohjaimessa render(conn, :show, product: product), Phoenix etsii vastaavan näkymämoduulin (esimerkiksi ProductView) ja funktion (esimerkiksi render("show.json", %{product: product})).

Tämä funktio määrittää, miten Elixirin product-struct muunnetaan JSON-kartaksi.

defmodule MyAppWeb.ProductView do
  use MyAppWeb, :view

  def render("index.json", %{products: products}) do
    %{data: render_many(products, __MODULE__, :product)}
  end

  def render("show.json", %{product: product}) do
    %{data: render_one(product, __MODULE__, :product)}
  end

  def product(product) do
    %{id: product.id,
      name: product.name,
      description: product.description,
      price: product.price}
  end
end

JSON-tulosteen mukauttaminen

ProductView-moduulin sisäinen product/1-funktio määrittää JSON-vastauksen tarkan rakenteen. Voitte:

  • Valita mukaan otettavat tai pois jätettävät kentät.
  • Nimetä kenttiä uudelleen asiakasystävällisemmiksi.
  • Sisällyttää niihin liittyvää dataa (esimerkiksi tuotteen luokan).

Näin voitte hallita tarkasti, mitä dataa API paljastaa ja miten se jäsennellään.

Pikatarkistus: pyyntöjen sisällöt

Ajatellaan Phoenix API -päätepistettä, joka on suunniteltu uuden käyttäjän luomiseen. Asiakas lähettää POST-pyynnön osoitteeseen /api/users, ja pyynnön JSON-runko on seuraava:

{"user": {"name": "Alice", "email": "alice@example.com"}}

Mikä conn-rakenteen osa sisältää tiedot {"name": "Alice", "email": "alice@example.com"}?

Kertaus: päätepisteet ja serialisointi

Hienoa työtä! Olette oppineet luomaan ja ymmärtämään Phoenix API -päätepisteitä:

  • API-päätepisteet: Resurssien toimintoihin tarkoitetut yksilölliset URL-osoitteet.
  • Pyynnön rungot: Asiakkaiden lähettämät tiedot (esimerkiksi POST- ja PUT-pyynnöissä) ovat kentässä conn.body_params.
  • Serialisointi: Elixir-tietojen muuntaminen JSON-muotoon API-vastauksia varten, mistä vastaavat ensisijaisesti Phoenixin näkymät.
  • Mukauttaminen: Näkymien avulla voitte hallita JSON-rakenteen tarkkaa muotoa.

Nämä käsitteet ovat olennaisia, kun rakennetaan vankkoja ja asiakasystävällisiä RESTful-rajapintoja Phoenixilla!

Aloita maksutta

Opi Elixir tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
12
Oppitunnit
48

Usein kysytyt kysymykset

Onko oppitunti ”API-päätepisteiden ja serialisoinnin toteuttaminen” ilmainen?

Kyllä – oppitunnin ”API-päätepisteiden ja serialisoinnin toteuttaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Elixir ja Phoenix: skaalautuva backend-kehitys-kurssin, päivitä CoddyKit PROhon. Elixir ja Phoenix: skaalautuva backend-kehitys-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”API-päätepisteiden ja serialisoinnin toteuttaminen”?

Rakentakaa API-päätepisteitä, käsitelkää pyyntö- ja vastausrungot sekä serialisoikaa tiedot tehokkaasti asiakassovellusten käyttöön. Harjoittelet Elixir ja Phoenix: skaalautuva backend-kehitys-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Elixir ja Phoenix: skaalautuva backend-kehitys-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Elixir ja Phoenix: skaalautuva backend-kehitys-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”API-päätepisteiden ja serialisoinnin toteuttaminen”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunnilla?

Kyllä. Jokainen Elixir ja Phoenix: skaalautuva backend-kehitys-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. API-suunnittelun periaatteet ja parhaat käytännöt
  2. API-päätepisteiden ja serialisoinnin toteuttaminen
  3. Todennus- ja valtuutusstrategiat
  4. Sivutus, suodatus ja API-versiointi
← Takaisin: Elixir ja Phoenix: skaalautuva backend-kehitys