Quickstarters
Feature Overview
How to Build a Backend for Golang?
32 นาที
บทนำ ในบทเรียนนี้ คุณจะได้เรียนรู้วิธีการสร้างและทดสอบแบ็คเอนด์ที่สมบูรณ์สำหรับ golang โดยใช้ back4app เราจะพาคุณไปทำการรวมฟีเจอร์ที่จำเป็นของ back4app—เช่น การจัดการฐานข้อมูล การตั้งค่าความปลอดภัย การตรวจสอบสิทธิ์ผู้ใช้ การจัดเก็บไฟล์ และ cloud code—เพื่อสร้างแบ็คเอนด์ที่ปลอดภัย ยืดหยุ่น และสามารถขยายได้ ซึ่งทำงานได้ดีร่วมกับเซิร์ฟเวอร์ http ของ go ของคุณ เราจะมุ่งเน้นไปที่การใช้ restful apis ของ back4app เพื่อเชื่อมต่อกับฐานข้อมูลจากไคลเอนต์ http ของ golang ของเรา แทนที่จะใช้ parse sdk ที่เฉพาะเจาะจง เพื่อให้เราสามารถแสดงให้เห็นถึงวิธีการสร้างฟังก์ชันจัดการที่ดูแลรักษาง่ายสำหรับแบ็คเอนด์ใหม่ของคุณ คุณจะเห็นว่าวิธีนี้ช่วยลดความซับซ้อนในการพัฒนาเมื่อเปรียบเทียบกับการตั้งค่าเซิร์ฟเวอร์ของคุณเองจากศูนย์ โดยการพึ่งพาคำค้นแบบเรียลไทม์ การจัดเก็บไฟล์ และระบบการตรวจสอบสิทธิ์ผู้ใช้ของ back4app คุณจะเร่งกระบวนการสร้างแบ็คเอนด์ของคุณ เมื่อสิ้นสุด คุณจะรู้วิธีการสร้างแบ็คเอนด์ golang ที่ปลอดภัย กำหนดตารางงานอัตโนมัติ และรวมเว็บฮุคภายนอก คุณจะเตรียมตัวได้ดีเพื่อพัฒนาพื้นฐานนี้ให้เป็นแอปพลิเคชันที่พร้อมสำหรับการผลิตหรือเพิ่มตรรกะที่กำหนดเองตามที่ต้องการ ข้อกำหนดเบื้องต้น บัญชี back4app ลงทะเบียนฟรี ที่นี่ https //www back4app com/ โครงการ back4app ใหม่ เริ่มต้นใช้งาน back4app https //www back4app com/docs/get started/new parse app สภาพแวดล้อมการพัฒนา go (golang) ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง go บนเครื่องของคุณแล้ว คุณสามารถหาคำแนะนำได้ใน เอกสารทางการของ go https //go dev/ ความรู้พื้นฐานเกี่ยวกับแพ็คเกจ http ของ go และ restful apis ความคุ้นเคยกับการเขียนฟังก์ชัน handler, การวิเคราะห์ข้อความแสดงข้อผิดพลาด, การจัดการคำขอวิธีการโพสต์ และการตั้งค่าเซิร์ฟเวอร์ http localhost จะช่วยได้ ตรวจสอบให้แน่ใจว่าคุณมีข้อกำหนดเบื้องต้นเหล่านี้ก่อนที่จะดำเนินการ การตั้งค่านี้จะช่วยให้ประสบการณ์ของคุณราบรื่นขึ้นเมื่อคุณค้นพบวิธีการสร้างแบ็กเอนด์สำหรับ golang โดยใช้ back4app ขั้นตอนที่ 1 – การสร้างโครงการใหม่บน back4app และการเชื่อมต่อ ทำไมต้องสร้างโครงการใหม่? การสร้างโครงการ back4app ใหม่เป็นขั้นตอนแรกของคุณ นี่คือที่ที่คุณจะเก็บข้อมูล กำหนดค่าการจัดเก็บไฟล์ กำหนดเวลาฟังก์ชันคลาวด์ และเพิ่มงานเบื้องหลัง โครงการแบ็กเอนด์นี้จะเป็นจุดยึดสำหรับทุกขั้นตอนถัดไป เข้าสู่ระบบบัญชี back4app ของคุณ คลิก “new app” ในแดชบอร์ด back4app ของคุณ ตั้งชื่อแอปของคุณ (เช่น “golang backend tutorial”) เมื่อสร้างเสร็จแล้ว มันจะปรากฏในแดชบอร์ดของคุณ แอปพลิเคชันนี้คือแบ็กเอนด์ที่ใช้ back4app ของคุณ การเชื่อมต่อผ่าน rest apis back4app มี restful apis สำหรับการสร้าง อัปเดต และลบข้อมูล ใน golang เราจะใช้ http client จากไลบรารีมาตรฐานของ go เพื่อสื่อสารกับ endpoints เหล่านี้ ค้นหา application id และ rest api key โดยไปที่ settings หรือ security & keys ในแอป back4app ของคุณ คุณจะต้องใช้ข้อมูลประจำตัวเหล่านี้ในแต่ละส่วนหัวของคำขอ เราจะแสดงให้เห็นในขั้นตอนถัดไปเมื่อเราติดต่อกับฐานข้อมูลโดยใช้วิธี post, get และคำขอ http อื่น ๆ ขั้นตอนที่ 2 – การตั้งค่าฐานข้อมูล การสร้างโมเดลข้อมูล ในการจัดเก็บข้อมูลใน back4app คุณต้องกำหนดคลาส (ตาราง) และคอลัมน์ (ฟิลด์) ตัวอย่างเช่น สมมติว่าเราต้องการคลาส todo คุณสามารถสร้างมันด้วยตนเองในแดชบอร์ด back4app ไปที่ ฐานข้อมูล ในแดชบอร์ดของแอปของคุณ สร้างคลาสใหม่ชื่อ “todo ” เพิ่มคอลัมน์เช่น title (string) และ iscompleted (boolean) คุณยังสามารถให้ระบบสร้างคอลัมน์โดยอัตโนมัติได้โดยการส่งวัตถุที่มีฟิลด์ใหม่จากแอปพลิเคชัน golang ของคุณ การสร้างโมเดลข้อมูลโดยใช้ ai agent เปิด ai agent ในแดชบอร์ดแอปของคุณ อธิบายโมเดลข้อมูลที่คุณต้องการ (เช่น “กรุณาสร้างคลาส todo ใหม่ที่มีฟิลด์ชื่อและฟิลด์ iscompleted ”) ยอมรับ โครงสร้างที่แนะนำ ฟีเจอร์ที่สะดวกนี้ช่วยประหยัดเวลาในการออกแบบโครงสร้างฐานข้อมูลของคุณ การอ่านและเขียนข้อมูลโดยใช้ rest api (ตัวอย่าง golang) ด้านล่างนี้คือตัวอย่างพื้นฐานของวิธีการสร้าง (วิธี post) และดึงข้อมูล (วิธี get) โดยใช้แพ็คเกจ http ของ go สมมติว่าคุณมี application id และ rest api key เป็นตัวแปรสภาพแวดล้อม package main import ( "bytes" "encoding/json" "fmt" "io/ioutil" "log" "net/http" ) type todo struct { objectid string `json "objectid,omitempty"` title string `json "title,omitempty"` iscompleted bool `json "iscompleted,omitempty"` } func main() { // example create todo newtodo = todo{ title "buy groceries", iscompleted false, } created, err = createtodo(newtodo) if err != nil { log println("error creating todo ", err) } else { log println("created todo with id ", created objectid) } // example fetch todos todos, err = fetchalltodos() if err != nil { log println("error fetching todos ", err) } else { for , t = range todos { log println("fetched todo ", t title, t iscompleted) } } } // createtodo sends a post request to save a new record in the "todo" class func createtodo(todo todo) (todo, error) { // convert struct to json body, = json marshal(todo) // create http request req, err = http newrequest("post", "https //parseapi back4app com/classes/todo", bytes newbuffer(body)) if err != nil { return todo{}, err } // set necessary headers req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") req header set("content type", "application/json") // execute the request client = \&http client{} resp, err = client do(req) if err != nil { return todo{}, err } defer resp body close() if resp statuscode != http statuscreated && resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return todo{}, fmt errorf("api error %s", string(bodybytes)) } // parse response var createdtodo todo if err = json newdecoder(resp body) decode(\&createdtodo); err != nil { return todo{}, err } return createdtodo, nil } // fetchalltodos retrieves all todo objects from back4app using get func fetchalltodos() (\[]todo, error) { req, err = http newrequest("get", "https //parseapi back4app com/classes/todo", nil) if err != nil { return nil, err } req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") client = \&http client{} resp, err = client do(req) if err != nil { return nil, err } defer resp body close() if resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return nil, fmt errorf("api error %s", string(bodybytes)) } // parse response for "results" key var result struct { results \[]todo `json "results"` } if err = json newdecoder(resp body) decode(\&result); err != nil { return nil, err } return result results, nil } ในตัวอย่างเหล่านี้ เราสร้าง http client เพิ่ม header ที่จำเป็น และจัดการกับรหัสการตอบกลับพร้อมกับข้อความแสดงข้อผิดพลาด จำไว้ว่าต้องเปลี่ยน your application id และ your rest api key เป็นคีย์จริงจากโปรเจกต์ back4app ของคุณ การอ่านและเขียนข้อมูลโดยใช้ graphql api back4app ยังมี graphql endpoint ที่ https //parseapi back4app com/graphql คุณสามารถใช้ไลบรารี go graphql client ที่เป็นที่นิยม (เช่น machine box graphql https //github com/machinebox/graphql ) เพื่อทำการสอบถามหรือการเปลี่ยนแปลง นี่อาจเป็นวิธีที่มีโครงสร้างมากกว่าการเรียก rest แบบดิบ การทำงานกับ live queries (ตัวเลือก) หากคุณต้องการเห็นการอัปเดตแบบเรียลไทม์ในแอปของคุณ คุณสามารถเปิดใช้งาน live queries ใน back4app dashboard golang ไม่มีไลบรารี parse live query อย่างเป็นทางการ อย่างไรก็ตาม คุณสามารถสร้างการเชื่อมต่อ websocket ของคุณเองเพื่อฟังการอัปเดต live query จาก wss\ //your subdomain b4a io ฟีเจอร์นี้มีประโยชน์สำหรับแอปที่ต้องการการซิงโครไนซ์ข้อมูลทันที ขั้นตอนที่ 3 – การใช้ความปลอดภัยด้วย acls และ clps ภาพรวม back4app ให้บริการ access control lists (acls) และ class level permissions (clps) เพื่อปกป้องข้อมูลของคุณ acls ถูกกำหนดไว้ในแต่ละวัตถุ ขณะที่ clps กำหนดกฎที่ครอบคลุมสำหรับทั้งคลาส class level permissions ไปที่ database ของแอปของคุณใน back4app เลือกคลาส (เช่น todo ) คลิก class level permissions และตั้งค่าการเข้าถึงอ่าน/เขียนสำหรับบทบาทผู้ใช้ที่แตกต่างกันหรือการเข้าถึงสาธารณะ acls คุณสามารถส่ง acl เมื่อสร้างหรืออัปเดตวัตถุผ่าน rest calls นี่จะทำให้แน่ใจว่าผู้ใช้หรือบทบาทบางคนเท่านั้นที่สามารถอ่าน/เขียนข้อมูลได้ สำหรับรายละเอียดเพิ่มเติม โปรดเยี่ยมชม app security guidelines https //www back4app com/docs/security/parse security ขั้นตอนที่ 4 – การเขียนฟังก์ชัน cloud code ทำไมต้องใช้ cloud code cloud code ช่วยให้คุณสามารถเรียกใช้ฟังก์ชันฝั่งเซิร์ฟเวอร์ ทริกเกอร์ หรือการตรวจสอบ—โดยไม่ต้องจัดการเซิร์ฟเวอร์ของคุณเอง คุณสามารถเพิ่มตรรกะทางธุรกิจขั้นสูงหรือรวม api ภายนอกจากฝั่งเซิร์ฟเวอร์ ตัวอย่างฟังก์ชัน cloud ตัวอย่างง่ายๆ คือฟังก์ชันที่คำนวณความยาวของข้อความ ในไฟล์ main js ของคุณในแดชบอร์ด back4app parse cloud define('calculatetextlength', async (request) => { const { text } = request params; if (!text) { throw new error('no text provided'); } return { length text length }; }); การปรับใช้ ปรับใช้ cloud code โดย back4app cli back4app dashboard ภายใต้ cloud code > functions วางโค้ดของคุณใน main js ตัวแก้ไขและคลิก deploy การเรียกใช้ cloud functions จาก golang คุณสามารถเรียกใช้ cloud function ผ่าน rest จาก http client ของคุณ func callcalculatetextlength(txt string) (int, error) { body, = json marshal(map\[string]string{"text" txt}) req, err = http newrequest("post", "https //parseapi back4app com/functions/calculatetextlength", bytes newbuffer(body)) if err != nil { return 0, err } // headers req header set("x parse application id", "your application id") req header set("x parse rest api key", "your rest api key") req header set("content type", "application/json") client = \&http client{} resp, err = client do(req) if err != nil { return 0, err } defer resp body close() if resp statuscode != http statusok { bodybytes, = ioutil readall(resp body) return 0, fmt errorf("api error %s", string(bodybytes)) } var result struct { result map\[string]int `json "result"` } if err = json newdecoder(resp body) decode(\&result); err != nil { return 0, err } return result result\["length"], nil } ขั้นตอนที่ 5 – การกำหนดค่าการตรวจสอบสิทธิ์ เปิดใช้งานการตรวจสอบสิทธิ์ผู้ใช้ back4app ใช้ user คลาสสำหรับการตรวจสอบสิทธิ์ เมื่อคุณสร้างผู้ใช้ใหม่ผ่าน rest ระบบจะเก็บข้อมูลรับรองอย่างปลอดภัยและสร้างโทเค็นเซสชัน curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"username" "alice", "password" "secret123", "email" "alice\@example com"}' \\ https //parseapi back4app com/users ใช้โทเค็นเซสชันที่ส่งคืนสำหรับคำขอถัดไปที่ต้องการสิทธิ์ของผู้ใช้ ใน go คุณจะส่งคำขอ http ประเภทเดียวกันจากไคลเอนต์ http ตามที่แสดงไว้ก่อนหน้านี้ การเข้าสู่ระบบด้วยโซเชียล สำหรับการเข้าสู่ระบบด้วยโซเชียล เช่น google หรือ facebook คุณจะต้องกำหนดค่าการตั้งค่า oauth บน back4app กระบวนการเหล่านี้มักเกี่ยวข้องกับการแลกเปลี่ยนโทเค็น โปรดดูที่ เอกสารการเข้าสู่ระบบด้วย apple / การเข้าสู่ระบบด้วยโซเชียล https //www back4app com/docs/platform/sign in with apple สำหรับรายละเอียด ขั้นตอนที่ 6 – การจัดการการจัดเก็บไฟล์ การตั้งค่าและการอัปโหลด คุณสามารถจัดเก็บไฟล์บน back4app โดยการส่งเป็นข้อมูลที่เข้ารหัส base64 หรือ multipart/form data curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{ "file" { "name" "myimage png", " type" "file", "base64" "ivborw0kggoaaaansuheugaa " } }' \\ https //parseapi back4app com/files/myimage png หลังจากการอัปโหลด คุณสามารถแนบไฟล์ไปยังวัตถุโดยการจัดเก็บ url ของไฟล์ที่ส่งกลับหรือพอยเตอร์ไฟล์ ใน go ให้สร้างคำขอ http ในลักษณะเดียวกัน—เพียงแค่ตรวจสอบให้แน่ใจว่าคุณเข้ารหัสเนื้อหาไฟล์อย่างถูกต้อง ขั้นตอนที่ 7 – การตรวจสอบอีเมลและการรีเซ็ตรหัสผ่าน ความสำคัญ การตรวจสอบอีเมลช่วยให้ผู้ใช้ควบคุมอีเมลที่ให้ไว้ ในขณะที่การรีเซ็ตรหัสผ่านช่วยให้พวกเขากู้คืนบัญชี ทั้งสองฟีเจอร์ช่วยเพิ่มความปลอดภัยและความไว้วางใจ การเปิดใช้งานการตรวจสอบอีเมล ไปที่ back4app dashboard ภายใต้ การตั้งค่าอีเมล , เปิดใช้งานอีเมลการตรวจสอบ ปรับแต่งเทมเพลตอีเมลของคุณหากจำเป็น เมื่อผู้ใช้ลงทะเบียน อีเมลการตรวจสอบจะถูกส่งไปยังพวกเขาโดยอัตโนมัติ การรีเซ็ตรหัสผ่าน ใช้ requestpasswordreset rest endpoint https //docs parseplatform org/rest/guide/#r passwordreset เพื่อเริ่มการรีเซ็ตรหัสผ่าน curl x post \\ h "x parse application id your app id" \\ h "x parse rest api key your rest api key" \\ h "content type application/json" \\ d '{"email" "alice\@example com"}' \\ https //parseapi back4app com/requestpasswordreset ขั้นตอนที่ 8 – การกำหนดตารางงานด้วย cloud jobs cloud jobs ทำอะไร cloud jobs ทำงานตามตารางเพื่อทำให้การทำงานอัตโนมัติ เช่น การทำความสะอาดข้อมูลที่ล้าสมัยหรือการส่งจดหมายข่าวรายสัปดาห์ parse cloud job('cleanupoldtodos', async (request) => { const todo = parse object extend('todo'); const query = new parse query(todo); // remove records older than 30 days // }); ปรับใช้งานนี้และกำหนดตารางใน back4app dashboard > app settings > server settings > background jobs ขั้นตอนที่ 9 – การรวม webhooks ทำไมต้องใช้ webhooks webhooks ช่วยให้คุณสามารถแจ้งบริการภายนอกเมื่อเกิดเหตุการณ์บางอย่างขึ้น ตัวอย่างเช่น คุณอาจส่งการแจ้งเตือน slack เมื่อมีการสร้างรายการ todo ใหม่ ไปที่ webhooks ใน back4app dashboard ของคุณ กำหนดค่า endpoint ของคุณ (เช่น https //your external service com/webhook ) กำหนดการกระตุ้น (เช่น หลังจากบันทึกบน todo ) คุณยังสามารถกระตุ้น api ภายนอกจาก cloud code โดยการเขียนคำขอ http client หากคุณต้องการควบคุมเหตุการณ์โดยตรง ขั้นตอนที่ 10 – การสำรวจแผงผู้ดูแล back4app ภาพรวม แอป back4app admin เป็นอินเทอร์เฟซแบบคลิกและจุดที่คุณสามารถแชร์กับสมาชิกในทีมที่ไม่ใช่เทคนิคเพื่อจัดการข้อมูล เปิดใช้งานแอป admin ไปที่ เพิ่มเติม > แอป admin ในแดชบอร์ด back4app ของคุณ เปิดใช้งาน และสร้างผู้ใช้แอดมิน ใช้ซับโดเมนที่คุณเลือกเพื่อเข้าสู่ ui ที่เรียบง่ายสำหรับการจัดการข้อมูล ซึ่งช่วยให้คุณไม่ต้องเขียนคำสั่งโดยตรงหรือโค้ดที่กำหนดเองเพื่อทำการดำเนินการพื้นฐาน บทสรุป ในคู่มือนี้ คุณได้ค้นพบวิธีการสร้างแบ็กเอนด์สำหรับ golang โดยใช้ back4app คุณได้สำรวจวิธีการเชื่อมต่อกับฐานข้อมูลผ่าน restful apis, ใช้มาตรการรักษาความปลอดภัยด้วย acls และ clps, รันงานที่กำหนดเวลาโดยใช้ cloud jobs, รวมเข้ากับบริการภายนอกโดยใช้ webhooks, และตั้งค่าการตรวจสอบสิทธิ์ผู้ใช้และการจัดเก็บไฟล์ ด้วยแพ็กเกจ http ของ go และฟีเจอร์ที่แข็งแกร่งของ back4app คุณสามารถสร้างแบ็กเอนด์ที่ทรงพลังซึ่งประหยัดเวลาและขยายได้อย่างง่ายดาย ตอนนี้ที่คุณได้เรียนรู้พื้นฐานแล้ว คุณสามารถขยายตรรกะฟังก์ชันตัวจัดการ golang ของคุณ เชื่อมต่อกับ api endpoints ใหม่ และสร้างแอปพลิเคชันที่มีความหลากหลายเพื่อตอบสนองความต้องการของคุณ ขั้นตอนถัดไป ปรับปรุงแอป golang ของคุณ เพิ่มฟีเจอร์ขั้นสูงเช่นการเข้าถึงตามบทบาท หรือปรับแต่งเซิร์ฟเวอร์ http ของคุณสำหรับการผลิต เรียนรู้เพิ่มเติมเกี่ยวกับการสอบถามแบบเรียลไทม์ รวม live queries สำหรับแอปที่ทำงานร่วมกัน สำรวจเอกสาร back4app ขั้นสูง ปรับแต่ง acls, บันทึก และการวิเคราะห์ของคุณ รวม api ของบุคคลที่สาม ใช้ cloud code หรือ webhooks โดยตรงเพื่อขยายฟังก์ชันการทำงานของแบ็กเอนด์ของคุณ