Quickstarters
Feature Overview
How to Build a Backend for Elixir?
38 นาที
บทนำ ในบทเรียนนี้ คุณจะได้เรียนรู้ วิธีการสร้างแบ็กเอนด์สำหรับ elixir โดยใช้ back4app เราจะพาคุณไปทำความเข้าใจการรวมฟีเจอร์สำคัญของ back4app—เช่น การจัดการฐานข้อมูล, ฟังก์ชัน cloud code, rest และ graphql apis, การตรวจสอบสิทธิ์ผู้ใช้, และการค้นหาแบบเรียลไทม์ (live queries)—เพื่อสร้างแบ็กเอนด์ที่ปลอดภัย, ขยายตัวได้, และมีความแข็งแกร่ง elixir ที่ทำงานบน erlang vm (beam) และใช้ประโยชน์จาก otp (erlang otp) เป็นที่รู้จักในด้านสภาพแวดล้อมที่ทนต่อข้อผิดพลาดและสามารถทำงานพร้อมกัน ซึ่งทำงานร่วมกับ back4app เพื่อสร้างโครงสร้างพื้นฐานที่ทันสมัยและมีประสิทธิภาพสูง คุณจะเห็นว่า การตั้งค่าอย่างรวดเร็วและสภาพแวดล้อมที่ใช้งานง่ายของ back4app สามารถลดเวลาและความพยายามของคุณได้อย่างมากเมื่อเปรียบเทียบกับการกำหนดค่าเซิร์ฟเวอร์และฐานข้อมูลด้วยตนเอง นี่รวมถึงการใช้การจับคู่รูปแบบ และการเชื่อมต่อกับเฟรมเวิร์กเว็บที่เลือกของ elixir เมื่อสิ้นสุดบทเรียนนี้ คุณจะมีพื้นฐานที่มั่นคงซึ่งคุณสามารถขยายไปสู่แอปพลิเคชันที่พร้อมสำหรับการผลิตหรือเสริมด้วยตรรกะที่กำหนดเองและ apis ของบุคคลที่สาม ข้อกำหนดเบื้องต้น ในการทำตามบทเรียนนี้ คุณจะต้องมี บัญชี back4app และโครงการ back4app ใหม่ เริ่มต้นใช้งาน back4app https //www back4app com/docs/get started/new parse app หากคุณยังไม่มีบัญชี คุณสามารถสร้างบัญชีได้ฟรี ทำตามคำแนะนำข้างต้นเพื่อเตรียมโครงการของคุณ สภาพแวดล้อมการพัฒนา elixir พื้นฐาน ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง elixir บนเครื่องของคุณ หากคุณวางแผนที่จะใช้เว็บเฟรมเวิร์กเช่น phoenix ให้ดูที่ คู่มือการติดตั้ง phoenix https //hexdocs pm/phoenix/installation html เพื่ออ้างอิง ความคุ้นเคยกับแนวคิดของ elixir เอกสารทางการของ elixir https //elixir lang org/docs html หากคุณเป็นมือใหม่ใน elixir ให้ตรวจสอบแหล่งข้อมูลเหล่านี้หรือบทเรียนสำหรับผู้เริ่มต้นก่อนเริ่ม ตรวจสอบให้แน่ใจว่าคุณมีข้อกำหนดเบื้องต้นทั้งหมดนี้ก่อนที่คุณจะเริ่ม การตั้งค่าโครงการ back4app ของคุณและเตรียมสภาพแวดล้อม elixir ในเครื่องของคุณจะช่วยให้คุณติดตามได้อย่างราบรื่นยิ่งขึ้น ขั้นตอนที่ 1 – การสร้างโครงการใหม่บน back4app และการเชื่อมต่อ สร้างโครงการใหม่ ขั้นตอนแรกใน การสร้างแบ็กเอนด์สำหรับ elixir บน back4app คือการสร้างโครงการใหม่ หากคุณยังไม่ได้สร้างโครงการ ให้ทำตามขั้นตอนเหล่านี้ เข้าสู่ระบบบัญชี back4app ของคุณ คลิกที่ปุ่ม “แอปใหม่” ในแดชบอร์ด back4app ของคุณ ตั้งชื่อแอปของคุณ (เช่น “elixir backend tutorial”) เมื่อโปรเจกต์ถูกสร้างขึ้น คุณจะเห็นมันถูกแสดงในแดชบอร์ด back4app ของคุณ โปรเจกต์นี้จะเป็นพื้นฐานสำหรับการตั้งค่าด้านหลังทั้งหมดที่กล่าวถึงในบทช่วยสอนนี้ การเชื่อมต่อผ่าน rest หรือ graphql back4app ใช้แพลตฟอร์ม parse เป็นพื้นฐาน สำหรับ elixir ขณะนี้ไม่มี sdk ของ parse อย่างเป็นทางการ แทนที่คุณสามารถเชื่อมต่อกับ back4app ได้อย่างง่ายดายโดยใช้ rest หรือ graphql apis ในโปรเจกต์ elixir ของคุณ คุณจะ ดึง application id และ rest หรือ graphql keys จากส่วน “app settings” หรือ “security & keys” ในแดชบอร์ด back4app ของคุณ กำหนดค่า http requests โดยใช้ไลบรารี elixir เช่น httpoison https //hex pm/packages/httpoison หรือ tesla https //hex pm/packages/tesla ตัวอย่างเช่น เพื่อเก็บข้อมูลรับรองในไฟล์ config ( config/dev exs หรือไฟล์ที่คล้ายกัน) config \ my app, \ b4a, app id "your application id", rest key "your rest api key", server url "https //parseapi back4app com" คุณสามารถอ้างอิงข้อมูลรับรองเหล่านี้ในโค้ดของคุณเพื่อทำการเรียก rest ตลอดคู่มือนี้ เราจะแสดงวิธีการโต้ตอบกับฐานข้อมูล back4app ระบบผู้ใช้ และฟีเจอร์อื่น ๆ โดยใช้คำขอมาตรฐาน http หรือ graphql ขั้นตอนที่ 2 – การตั้งค่าฐานข้อมูล การสร้างโมเดลข้อมูล ใน back4app ข้อมูลจะถูกเก็บใน คลาส คุณสามารถสร้างคลาสใหม่ในแดชบอร์ด back4app ไปที่ส่วน “ฐานข้อมูล” ในแดชบอร์ด back4app ของคุณ สร้างคลาสใหม่ (เช่น “todo”) และเพิ่มคอลัมน์ที่เกี่ยวข้อง เช่น ชื่อเรื่อง (string) และ iscompleted (boolean) การสร้างโมเดลข้อมูลโดยใช้ ai agent back4app ยังมี ai agent เพื่อช่วยคุณในการอธิบายและสร้างโมเดลข้อมูลของคุณ เปิด ai agent จากแดชบอร์ดแอปของคุณหรือจากเมนู อธิบายโมเดลข้อมูลของคุณ ด้วยภาษาธรรมดา (เช่น “กรุณาสร้าง todo app ใหม่พร้อมกับสคีมาคลาสที่สมบูรณ์”) ให้ ai agent สร้างสคีมา โดยอัตโนมัติ การอ่านและเขียนข้อมูลโดยใช้ sdk (ถ้าใช้ได้) เนื่องจาก elixir ไม่มี parse sdk อย่างเป็นทางการ เราจะข้ามการใช้งาน sdk โดยตรง แทนที่เราจะแสดง rest , graphql , และ live queries ด้านล่างนี้ การอ่านและเขียนข้อมูลโดยใช้ rest api ติดตั้ง http client เช่น httpoison ใน mix exs defp deps do \[ {\ httpoison, " > 1 8"} ] end จากนั้น รัน mix deps get เพื่อสร้าง (บันทึก) อ็อบเจ็กต์ todo จากแอปพลิเคชัน elixir ของคุณ defmodule myapp todo do @moduledoc false require logger alias myapp config def create todo(title, is completed) do url = config server url() <> "/classes/todo" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{"title" => title, "iscompleted" => is completed}) case httpoison post(url, body, headers) do {\ ok, %httpoison response{status code 201, body resp body}} > logger info("todo created #{resp body}") {\ ok, resp body} {\ ok, %httpoison response{status code status, body error body}} > logger error("error creating todo (#{status}) #{error body}") {\ error, error body} {\ error, error} > logger error("http error #{inspect(error)}") {\ error, error} end end end และเพื่อสอบถามวัตถุ todo ของคุณ def fetch todos() do url = config server url() <> "/classes/todo" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()} ] httpoison get(url, headers) end การอ่านและเขียนข้อมูลโดยใช้ graphql api คุณยังสามารถโต้ตอบผ่าน graphql ได้ ตัวอย่างเช่น การสร้าง todo mutation { createtodo(input { fields { title "clean the house" iscompleted false } }) { todo { objectid title iscompleted } } } ใน elixir คุณอาจส่งสิ่งนี้ด้วยไคลเอนต์ http ด้วย graph query = """ mutation { createtodo(input { fields { title "new from graphql", iscompleted false } }) { todo { objectid title } } } """ url = config server url() <> "/graphql" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] httpoison post(url, jason encode!(%{"query" => graph query}), headers) การทำงานกับ live queries (ตัวเลือก) สำหรับการอัปเดตแบบเรียลไทม์ back4app มี live queries คุณสามารถเปิดใช้งาน live queries ใน การตั้งค่าเซิร์ฟเวอร์ เนื่องจากขณะนี้ไม่มีไลบรารีลูกค้า elixir parse แบบเนทีฟ คุณจะเชื่อมต่อผ่านช่องทาง phoenix หรือไคลเอนต์ websocket ที่กำหนดเองไปยัง wss\ //your subdomain here b4a io จุดสิ้นสุด ซึ่งอาจต้องการการเขียนโค้ดที่กำหนดเองเพื่อจัดการการสมัครสมาชิก ข้อความ ฯลฯ ขั้นตอนที่ 3 – การใช้ความปลอดภัยด้วย acls และ clps ภาพรวมโดยย่อ back4app มี access control lists (acls) และ class level permissions (clps) เพื่อปกป้องและจัดการการเข้าถึงข้อมูล acls ใช้กับวัตถุแต่ละรายการ ในขณะที่ clps ใช้กับทั้งคลาส ขั้นตอนทีละขั้นตอน การอนุญาตระดับคลาส (clps) ในแดชบอร์ด back4app ของคุณ ภายใต้ ฐานข้อมูล , เลือกคลาส (เช่น “todo”) และเปิดแท็บ การอนุญาตระดับคลาส ปรับการตั้งค่า (เช่น “ต้องการการตรวจสอบสิทธิ์” หรือ “ไม่มีการเข้าถึง” สำหรับสาธารณะ) กำหนดค่า acls เมื่อสร้างหรืออัปเดตวัตถุ คุณสามารถส่งข้อมูล acl ในคำขอ rest หรือ graphql ของคุณ ตัวอย่างเช่น ระบุ acl ใน json หากคุณต้องการควบคุมแบบละเอียดต่อวัตถุ สำหรับข้อมูลเพิ่มเติม โปรดเยี่ยมชม แนวทางความปลอดภัยของแอป https //www back4app com/docs/security/parse security ขั้นตอนที่ 4 – การเขียนฟังก์ชัน cloud code ทำไมต้องใช้ cloud code cloud code ช่วยให้คุณสามารถรันตรรกะฝั่งเซิร์ฟเวอร์โดยไม่ต้องจัดการเซิร์ฟเวอร์ของคุณเอง ด้วย elixir คุณมักจะพึ่งพา otp สำหรับการทำงานพร้อมกัน แต่ที่นี่คุณสามารถสร้าง javascript cloud code ใน back4app เพื่อจัดการการตรวจสอบสิทธิ์ ทริกเกอร์ หรือตรรกะทางธุรกิจที่กำหนดเอง โค้ดนี้ทำงานบน parse server ดังนั้นคุณสามารถเก็บโค้ด elixir ของคุณให้มุ่งเน้นไปที่งานของลูกค้าหรือไมโครเซอร์วิสในขณะที่การทำงานหนักเกิดขึ้นใน cloud code ฟังก์ชันตัวอย่าง ใน main js บนแดชบอร์ด back4app หรือใช้ cli // main js parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); การปรับใช้ ปรับใช้ผ่าน back4app cli https //www back4app com/docs/local development/parse cli หรือโดยการวางลงในแดชบอร์ดภายใต้ cloud code > functions และคลิก deploy การเรียกใช้ cloud code จาก elixir คุณอาจใช้ defmodule myapp cloudfunctions do alias myapp config def calculate text length(text) do url = config server url() <> "/functions/calculatetextlength" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{text text}) httpoison post(url, body, headers) end end ขั้นตอนที่ 5 – การกำหนดค่าการตรวจสอบสิทธิ์ เปิดใช้งานหรือกำหนดค่าการตรวจสอบสิทธิ์ back4app ใช้คลาส user สำหรับการตรวจสอบสิทธิ์ คุณสามารถจัดการการลงทะเบียน การเข้าสู่ระบบ และการรีเซ็ตรหัสผ่านได้อย่างง่ายดาย จาก elixir คุณจะใช้การเรียก rest เป็นส่วนใหญ่ defmodule myapp auth do alias myapp config def sign up user(username, password, email) do url = config server url() <> "/users" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{ username username, password password, email email }) httpoison post(url, body, headers) end def log in user(username, password) do url = config server url() <> "/login?username=#{username}\&password=#{password}" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()} ] httpoison get(url, headers) end end การเข้าสู่ระบบด้วยโซเชียล back4app รองรับการรวมกับ google, apple, facebook และอื่นๆ ในกรณีส่วนใหญ่ คุณจะนำผู้ใช้ไปยังกระบวนการ oauth จากนั้นใช้โทเค็นที่ส่งคืนโดยผู้ให้บริการเหล่านี้เพื่อทำการเข้าสู่ระบบ parse ดู เอกสารการเข้าสู่ระบบด้วยโซเชียล https //www back4app com/docs/platform/sign in with apple สำหรับรายละเอียด ขั้นตอนที่ 6 – การจัดการการจัดเก็บไฟล์ การตั้งค่าไฟล์เก็บข้อมูล back4app เก็บไฟล์อย่างปลอดภัย จาก elixir คุณจะอัปโหลดไฟล์ผ่าน rest defmodule myapp filestorage do alias myapp config require logger def upload file(file path) do file name = path basename(file path) url = config server url() <> "/files/#{file name}" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/octet stream"} ] body = file read!(file path) case httpoison post(url, body, headers) do {\ ok, %httpoison response{status code 201, body resp body}} > logger info("file uploaded #{resp body}") {\ ok, resp body} error > logger error("error uploading file #{inspect(error)}") error end end end คุณจะได้รับการตอบกลับ json พร้อม url ของไฟล์ ซึ่งคุณสามารถเก็บไว้ในคลาส (เช่น, photo ) เพื่ออ้างอิง การพิจารณาด้านความปลอดภัย คุณสามารถกำหนดค่าผู้ที่สามารถอัปโหลดไฟล์ใน fileupload การตั้งค่าในโปรเจกต์ back4app ของคุณ โดยจำกัดการอัปโหลดให้กับผู้ใช้ที่ได้รับการตรวจสอบตัวตนหากต้องการ ขั้นตอนที่ 7 – การตรวจสอบอีเมลและการรีเซ็ตรหัสผ่าน ภาพรวม การตรวจสอบอีเมลช่วยให้แน่ใจว่าผู้ใช้เป็นเจ้าของที่อยู่อีเมลที่ใช้ในระหว่างการลงทะเบียน การรีเซ็ตรหัสผ่านช่วยให้พวกเขากู้คืนบัญชีได้อย่างปลอดภัย ฟีเจอร์ทั้งสองนี้ถูกสร้างขึ้นใน back4app การกำหนดค่าดashboard ของ back4app เปิดใช้งานการตรวจสอบอีเมล ภายใต้ “การตั้งค่าแอป” หรือ “การรับรองความถูกต้อง” ของแอปของคุณ กำหนดค่า ที่อยู่จาก และเทมเพลตอีเมล เปิดใช้งานการรีเซ็ตรหัสผ่าน เพื่อให้ผู้ใช้สามารถรีเซ็ตผ่านลิงก์ที่ส่งทางอีเมลถึงพวกเขา โค้ด/การดำเนินการ เมื่อเปิดใช้งานในแดชบอร์ดแล้ว คุณสามารถเรียกใช้การรีเซ็ตรหัสผ่านได้ defmodule myapp auth do def request password reset(email) do url = config server url() <> "/requestpasswordreset" headers = \[ {"x parse application id", config app id()}, {"x parse rest api key", config rest key()}, {"content type", "application/json"} ] body = jason encode!(%{email email}) httpoison post(url, body, headers) end end ขั้นตอนที่ 8 – การกำหนดเวลาในการทำงานด้วย cloud jobs งานคลาวด์ที่ทำ ตัวอย่าง // main js parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); const now = new date(); const thirty days = 30 24 60 60 1000; const cutoff = new date(now thirty days); query lessthan('createdat', cutoff); try { const oldtodos = await query find({ usemasterkey true }); await parse object destroyall(oldtodos, { usemasterkey true }); return `deleted ${oldtodos length} old todos `; } catch (err) { throw new error('error during cleanup ' + err message); } }); นำไปใช้ โค้ด ไปที่แดชบอร์ด back4app > การตั้งค่าแอป > การตั้งค่าเซิร์ฟเวอร์ > งานพื้นหลัง กำหนดเวลา งานให้ทำงานทุกวันหรือในความถี่ที่คุณเลือก ขั้นตอนที่ 9 – การรวม webhooks คำจำกัดความ webhooks ช่วยให้แอปพลิเคชัน back4app ของคุณสามารถส่งคำขอ http ไปยังบริการภายนอก (เช่น ช่อง slack หรือ stripe) เมื่อเกิดเหตุการณ์บางอย่างขึ้น การตั้งค่า ไปที่การตั้งค่า webhooks ในแดชบอร์ด back4app ของคุณ > เพิ่มเติม > webhooks ตั้งค่า endpoint (ตัวอย่างเช่น, https //your service com/webhook endpoint ) กำหนดค่า triggers เช่น “บันทึกใหม่ในคลาส todo ” ตัวอย่าง หากคุณต้องการส่งข้อมูลไปยัง slack ทุกครั้งที่มีการสร้าง todo คุณสามารถเพิ่ม webhook ใหม่ที่ชี้ไปยัง url webhook ที่เข้ามาของ slack ของคุณ คุณยังสามารถกำหนด webhooks ใน cloud code โดยการส่งคำขอ http ที่กำหนดเองใน triggers เช่น aftersave ขั้นตอนที่ 10 – สำรวจแผงผู้ดูแล back4app จะหามันได้ที่ไหน แอป back4app admin app เป็นอินเทอร์เฟซที่ใช้งานง่ายสำหรับการจัดการข้อมูลของคุณ คุณสามารถเปิดใช้งานได้จาก app dashboard > more > admin app ฟีเจอร์ สร้างผู้ดูแลคนแรก , ซึ่งตั้งค่าบทบาท b4aadminuser และคลาสเพิ่มเติม กำหนดชื่อโดเมนย่อย เพื่อเข้าถึงอินเทอร์เฟซผู้ดูแล เข้าสู่ระบบ เพื่อดูและจัดการข้อมูลในอินเทอร์เฟซที่เรียบง่าย บทสรุป โดยการติดตามบทแนะนำนี้เกี่ยวกับวิธีการสร้างแบ็กเอนด์สำหรับ elixir ด้วย back4app คุณได้ สร้างแบ็กเอนด์ที่ปลอดภัย บนแพลตฟอร์มของ back4app โดยใช้ elixir สำหรับการรวมระบบ ตั้งค่าฐานข้อมูล ด้วยคลาส ประเภทข้อมูล และความสัมพันธ์ ใช้ rest/graphql เพื่อโต้ตอบกับข้อมูลของคุณจาก elixir ใช้มาตรการรักษาความปลอดภัย โดยใช้ acls และ clps เพิ่มตรรกะที่กำหนดเอง ด้วยฟังก์ชัน cloud code กำหนดค่าการตรวจสอบสิทธิ์ผู้ใช้ ด้วยการยืนยันอีเมลและการรีเซ็ตรหัสผ่าน จัดการการจัดเก็บไฟล์ และการเรียกคืน กำหนดเวลางานเบื้องหลัง สำหรับการทำงานอัตโนมัติ รวมบริการภายนอก ด้วย webhook สำรวจ back4app admin panel สำหรับการจัดการข้อมูลที่ง่าย ด้วยโมเดลการทำงานพร้อมกันของ elixir (ขับเคลื่อนโดย erlang vm) และ otp ร่วมกับบริการที่สามารถปรับขนาดและยืดหยุ่นของ back4app คุณสามารถสร้างแบ็กเอนด์ที่มีความแข็งแกร่งสูง ดำเนินการสำรวจฟีเจอร์ที่ซับซ้อนมากขึ้น รวมตรรกะทางธุรกิจของคุณ และให้ back4app ช่วยคุณจัดการกับงานที่หนัก ขั้นตอนถัดไป สร้างแอป elixir ที่พร้อมสำหรับการผลิต โดยการชั้นนี้กับเว็บเฟรมเวิร์ก elixir/phoenix ที่คุณชื่นชอบ รวมฟีเจอร์ขั้นสูง เช่นการควบคุมการเข้าถึงตามบทบาทหรือ api ของบุคคลที่สาม (เกตเวย์การชำระเงิน, บริการส่งข้อความ) สำรวจเอกสารทางการของ back4app สำหรับความปลอดภัยขั้นสูง, บันทึก, การปรับแต่งประสิทธิภาพ, และอื่นๆ ดูบทเรียนอื่นๆ สำหรับแอปเรียลไทม์, แดชบอร์ด iot, หรือบริการตามตำแหน่ง ด้วยการจับคู่รูปแบบและการทำงานพร้อมกันของ otp ที่คุณมีอยู่, คุณพร้อมที่จะจัดการกับแอปพลิเคชันที่หลากหลาย!