Phoenix API의 DB Accessor/Validator 코드 해석

7272 단어 ElixirPhoenix
(이 기사는 "서버 측 프로그래밍 Advent Calendar 2017"의 3 일째입니다)

fukuoka.ex 대표 piacere
방문해 주셔서 감사합니다

이번에는, 지난번 의 계속으로, Phoenix에서 자동 생성한 API의, DB 액세서/버리데이터에 대해서, 코드 해석합니다

통지:Elixir MeetUp을 6월 말에 개최합니다

「fukuoka.ex#11:DB/데이터 사이언스에 커넥트 하는 Elixir」 을 6/22(금) 19시에 개최합니다



fukuoka.ex의 발족으로부터, 딱 1주년이 되는, 기념적인 이벤트이기도 하기 때문에, 이 칼럼을 마음에 받은 분과, 꼭 함께 고조되고 싶습니다

후쿠오카 근처에 거주하는 분이라면 놀러와주세요.

대인기로, 한 번은 만석이 되었습니다만, 늘어났으므로, 아래와 같이 URL로부터 참가해 주세요
htps // // 후쿠오카에 x. 곤파 s. 코 m / 에ょ t / 87241

특별 게스트는 Erlang/Elixir의 양면에서 세계적으로 유명한 '역무 켄지씨'와 기타큐슈 이즈카시에서 'e-ZUKA Tech Night'를 6년간 주최하는 하우 인터내셔널의 '다니구치 코헤이 씨' 두 사람과 정말 화려한 이벤트입니다.

저는 이번 시리즈를 근거로 한 "1집에 1대, 개인 데이터 분석 AI를 전원이 가지는 2020년을 만든다"라는 제목으로, Elixir에 의한 브라우저 UI상에서 빨리 데이터 분석 플랫폼을 피로 할 LT를 제공합니다.

DB 액세서 및 검증자



API의 리퀘스트/응답의 해석/개조는, 전회까지의 내용만으로 충분해 갈 수 있습니다만, 드디어, DB액세서와 밸리데이터에 대해서도 파악해 두는 것이, Phoenix의 이해는 진행되므로, 드디어 해설해 일어나

DB 액세서는 아래의 모듈에 집약되어 ​​있습니다.

list_sample()은 컨트롤러의 index()에서 호출되고 create_sample()은 컨트롤러의 create()에서 호출됩니다.

이 모듈 내용은 API만이 아니라 "mix phx.gen.html~"로 자동 생성하는 Web일 때도 같은 내용으로 생성됩니다.

lib/sample_analytics/api/api.ex
defmodule SampleAnalytics.Api do

  def list_sample do
    Repo.all(Sample)
  end
 …
  def create_sample(attrs \\ %{}) do
    %Sample{}
    |> Sample.changeset(attrs)
    |> Repo.insert()
  end


유효성 검사기는 다음 모듈의 changeset()로 생성됩니다.

changeset()는 위의 DB 접근자 모듈 create_sample() 및 update_sample()에서 DB 데이터 업데이트(≒Repo.insert() 또는 Repo.update()) 바로 전에 호출됩니다.

이 모듈 내용도, 「mix phx.gen.html~」로 자동 생성하는 Web의 때와 같습니다만, DB 액세서로 DB 데이터 갱신 직전에 changeset()가 불리는 점도 같습니다

lib/sample_analytics/api/sample.ex
defmodule SampleAnalytics.Api.Sample do
  use Ecto.Schema
  import Ecto.Changeset

  schema "sample" do
    field :body, :string
    field :title, :string

    timestamps()
  end

  @doc false
  def changeset(sample, attrs) do
    sample
    |> cast(attrs, [:title, :body])
    |> validate_required([:title, :body])
  end
end

또한, changeset() 내에서 호출할 수 있는 밸리데이션 처리에 대해서는, "elixir on phoenix changeset의 Validates" 를 보시면 참고가 된다고 생각합니다



이번에는 Phoenix API의 DB Accessor/Validator 코드 흐름을 분석했습니다.

DB 액세서를 만지는 기회는, 거기까지는 없다고 생각합니다만, 한편으로 밸리데이터는, 비교적 커스터마이즈 할 기회가 있으므로, 캐치 업 해 두면, Phoenix API 개발이 부드러워질까 생각합니다

p.s.「좋아요」 잘 부탁드립니다



원한다면 페이지 왼쪽 상단의 또는 을 클릭하십시오.

좋은 웹페이지 즐겨찾기