Elixir phoenix – Render skema Ecto ke json dengan hubungan

Saat menulis API dengan Phoenix dan merender json ke klien,

  • Untuk beberapa bidang saya ingin mempertahankan nilai aslinya.
  • Untuk beberapa bidang, saya ingin melakukan perhitungan atau memformat data sebelum kembali.
  • Dan saya ingin membuat asosiasi Ecto juga.

Saat mengerjakan proyek di OnPoint, saya telah membuat modul kecil yang membantu melakukan ini dengan lebih mudah.

Saya telah mengekstrak modul itu dan melepaskannya sebagai paket bernama JsonView . Kode sumbernya di-host di github:

https://github.com/bluzky/json_view

Anda dapat menggunakannya dengan Phoenix.View atau menggunakannya secara mandiri. Ini membantu untuk memanipulasi data, dan menangani asosiasi rendering secara otomatis.

Mari lihat.

Pertama-tama tentukan modul tampilan

 defmodule MyApp . UserView do use JsonView def render ( "user.json" , %{ user: user }) do render_json ( user , [ :first_name , :last_name , :vatar ], [], []) end end defmodule MyApp . PostView do use JsonView # define which fields return without modifying @fields [ :title , :content , :excerpt , :cover ] # define which fields that need to format or calculate, you have to define `render_field/2` below @custom_fields [ :like_count ] # define which view used to render relationship @relationships [ author: MyApp . UserView ] def render ( "post.json" , %{ post: post }) do # 1st way if `use JsonView` render_json ( post , @fields , @custom_fields , @relationships ) end def render_field ( :like_count , item ) do # load like_count from some where end end

Dan kemudian menggunakannya

 post = % Post { title: "Hello JsonView" , excerpt: "Now you can render Json easier" , content: "Install and put it to work" , cover: nil , inserted_at: ~N[2021-07-05 00:00:00] , updated_at: ~N[2021-07-09 00:00:00] , author: % User { first_name: "Daniel" , last_name: "James" , email: "daniel@example.com" , avatar: nil , inserted_at: ~N[2021-06-30 00:00:00] updated_at: ~N[2021-07-02 00:00:00] } } MyApp . PostView . render ( "post.json" , %{ post: post }) # or invoke from PostController render ( conn , "post.json" , post: post )

Ini adalah hasil yang dapat Anda gunakan untuk kembali dari PhoenixController

 %{ title: "Hello JsonView" , excerpt: "Now you can render Json easier" , content: "Install and put it to work" , cover: nil , like_count: nil , author: %{ first_name: "Daniel" , last_name: "James" } }

Jika Anda memiliki umpan balik, silakan beri komentar atau buat masalah .

Dalam posting berikutnya saya akan melalui langkah demi langkah untuk menulis perpustakaan ini.

July 10, 2021

codeorayo

Ampuh! Ini rahasia mengembangkan aplikasi secara instan, tinggal download dan kembangkan. Gabung sekarang juga! Premium Membership [PRIVATE] https://premium.codeorayo.com

Leave a Reply

Your email address will not be published. Required fields are marked *