API-päätepisteiden ja serialisoinnin toteuttaminen
Rakentakaa API-päätepisteitä, käsitelkää pyyntö- ja vastausrungot sekä serialisoikaa tiedot tehokkaasti asiakassovellusten käyttöön.
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:decimalAPI-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
endPyyntö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
endPyyntö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
endMitä 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
endJSON-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- jaPUT-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!
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
- API-suunnittelun periaatteet ja parhaat käytännöt
- API-päätepisteiden ja serialisoinnin toteuttaminen
- Todennus- ja valtuutusstrategiat
- Sivutus, suodatus ja API-versiointi