บันทึกการลองเล่น Spin
วันนี้ได้ลองหัดเล่นตัว Spin ก็เลยนำมาเขียนบันทึกเป็นการเรียนรู้เอาไว้ครับ ซึ่งจริงๆแล้วตัว Spin มันก็ยังเป็น early preview อยู่นะครับ เนื่องจากช่วงนี้ผมสนใจ Rust และ WASM ก็เลยได้เจอ Spin ผ่านๆ และอยากลองเล่นดูซักหน่อย
สำหรับแหล่งอ้างอิง, Docs และตัวอย่างเพิ่มเติม
ณ วันที่เขียนบทความคือ spin 0.3.0 ซึ่งในอนาคตอาจจะมี breaking changes ก็ได้ เนื่องจากยังเป็น Early Preview / Experimental code อยู่
Spin คืออะไร?
Spin is a framework for building and running event-driven microservice applications with WebAssembly (Wasm) components
ก็คือมองว่า เราสามารถ Run App ที่เราเขียนขึ้นจากภาษาอะไรก็ได้ (ที่มันสามารถแปลงเป็น WebAssembly ได้) ก็สามารถใช้งาน Spin ได้ เพราะตัวอย่าง ก็มีทั้ง Go และ Rust รวมถึงภาษาอื่นๆด้วย เหมือนเป็น Serverless เวอร์ชั่น WebAssembly
Prerequisites
- ติดตั้ง Rust และ Cargo เรียบร้อยแล้ว (แนะนำใช้ rustup)
- (Optional) ติดตั้ง Apple’s Command Line Tools (กรณีติดตั้ง spin ด้วย Make)
- ใช้
wasm32-wasi
เพิ่มได้ด้วยคำสั่งrustup target add wasm32-wasi
การติดตั้ง spin
ถ้าจาก Docs มีวิธีการติดตั้งหลายท่าครับ Quickstart คือ
- โหลด latest release แล้วมาแตกไฟล์เอง
- ติดตั้งผ่าน
cargo
- ติดตั้งด้วย Makefile
สำหรับผมเลือกติดตั้ง ผ่าน make
ครับ
ช่วง build จะใช้เวลาซักพัก และ CPU วิ่งไป 100% ทำเอาพัดลมของ Macbook M1 ดังเลยแฮะ เมื่อติดตั้งเสร็จ เราสามารถใช้คำสั่ง spin
ได้แล้ว ทดสอบ เช็ค version ดู หรือดู help คำสั่งอื่นๆ:
จากนั้น ก็เพิ่ม PATH เพื่อให้ ใช้คำสั่ง spin
ได้จากทุกๆ directory โดยผมใช้ ZSH ก็เลยเพิ่มไปในไฟล์ .zshrc
Reload หรือเปิด Terminal ใหม่
ทีนี้ spin เราก็เรียกจาก ที่ไหนก็ได้แล้ว โดยไม่ต้องเข้าไป .target/release/spin
ผลลัพธ์
Hello Spin
สร้าง Project ขึ้นมาใหม่ด้วย template แต่เรายังไม่มี template เลย ก็ทำการ install template ก่อน
เช็คว่า มี template เรียบร้อยแล้ว:
จะได้ผลลัพธ์แบบนี้
จากนั้น ผมก็ทำการสร้างโปรเจ็คโดยใช้ template http-rust
จากนั้นก็ตอบคำถาม ตั้งชื่อ name, description กำหนด HTTP base และ path:
จะได้โฟลเดอร์ hello-spin
ที่เราสร้างขึ้น ลองสำรวจซักหน่อย ข้างในก็จะมีไฟล์ประมาณนี้
ตัวไฟล์ spin.toml
ข้างในจะกำหนด WebAssembly components และตัว triggers
จะเห็นว่า เรามีกำหนด component hello-spin
และตัว source ก็คือ hello_spin.wasm
ไฟล์ที่เราจะได้หลังจาก build release ส่วน route ก็จะเป็น /hello
ทดลอง build project
Running application
ลอง start server ด้วย spin up
ครับ จะได้เว็บ http://localhost:3000/hello
ลอง curl ดูผลลัพธ์หรือเปิดหน้าเว็บดูก็ได้
ได้ผลลัพธ์
ต่อจากนี้?
หลังจากเริ่ม Hello World ไป ตัว Doc เค้าก็มี Tutorial การทำ URL Shortener ด้วย Spin เหมือนกัน ก็ว่าจะลองไปนั่งอ่าน และทำตามหลังจากนี้ต่อครับ
และก็ตัวอย่างอื่นๆ spin-kitchensink สามารถดูตัวอย่างเพิ่มเติมได้ มีทั้งแบบการเขียนด้วยภาษาต่างๆ เช่น AssemblyScript, C#, Go, Python, Rust, Zig ด้วยตัวอย่างหลายๆแบบ:
- แอพ Hello World ธรรมดา
- ตัวอย่างการ serve static assets
- การ send HTTP Request
หรือตัวอย่างจาก ภาษาอื่นๆ เพิ่มเติม Building Spin components in other languages
จบไปแล้วกับบันทึกสั้นๆ แม้ว่าทั้งหมด จะทำตาม Tutorial พื้นฐาน แต่ก็สนุกดี ได้ลองลงมือทำ ถือว่าได้ลองเล่นอะไรเล็กๆน้อยๆ ช่วงเช้าของวันหยุดไปละกัน 🤣
Happy Coding ❤️
- Authors
-
Chai Phonbopit
เป็น Web Dev ในบริษัทแห่งหนึ่ง ทำงานมา 10 ปีกว่าๆ ด้วยภาษาและเทคโนโลยี เช่น JavaScript, Node.js, React, Vue และปัจจุบันกำลังสนใจในเรื่องของ Blockchain และ Crypto กำลังหัดเรียนภาษา Rust