ใช้งาน cURL กับ OpenStack Swift

การเชื่อมต่อกับ Swift ทำได้หลายวิธีตั้งแต่ใช้งาน client ผ่าน python-swift ใช้งานผ่าน SDK ของภาษาต่างๆ แต่วิธีที่ง่ายสะดวกในการใช้งานคงเป็น cURL ธรรมดาๆ ที่เราใช้กัน เนื่องจาก Swift เป็น object storage การสื่อสารผ่าน REST API เป็นช่องทางหลักสำหรับการทำงานกับ storage ประเภทนี้อยู่แล้ว ดังนั้นใช้ cURL สั่งงานผ่าน HTTP Request ก็ใช้งาน Swift ได้เช่นกัน มาลองดูคำสั่ง cURL กันก่อน
cURL เป็นคำสั่งที่ใช้งานกับ HTTP เป็นหลัก ถ้าท่านที่ใช้ OSX จะคุ้นเคยกับคำสั่งนี้ดีเพราะไม่มี wget ต้องใช้ cURL สำหรับดาวน์โหลดไฟล์ นั่นก็คือใช้ GET Method แล้วเรียกผ่าน URL นั่นเอง ครั้งนี้ก็จะใช้งานคล้ายๆ กัน แต่จะต้องสั่ง HTTP Request หลายแบบเพื่อสั่งงาน Swift รูปแบบของ Option ที่เราต้องใช้เพิ่มมีดังนี้

  • -X METHOD ระบุว่าจะใช้ HTTP request method อะไร เช่น HEAD, GET, PUT, DELET เป็นต้น
  • -i แสดง HTTP response header
  • -H HEADER ระบุ HTTP Header ที่ใช้ใน request

ก่อนอื่นเราต้องมี Swift กันก่อน ใครยังไม่มีใช้ SAIO ทดลองหัดเล่นกันก่อนได้ เริ่มจาก Authentication กันก่อน
curl -i -H "X-Auth-Key: testing" -H "X-Auth-User: test:tester" http://swift.fffee.org/auth/v1.0
ผลลัพท์ที่ได้ดังนี้

จากการเราจะได้ค่า x-storage-url เป็น http://swift.fffee.org/v1/AUTH_test สำหรับ user ชื่อ test:tester และ x-auth-token เป็น AUTH_tkafe6883bb2b0411f8fb29fabcecee381 เอาไว้สั่งงาน storage ของเรา
ใช้ HEAD method ดูว่าเราใช้ storage ไปเท่าไรแล้วใช้คำสั่งดังนี้
curl -X HEAD -i -H "X-Auth-Token: AUTH_tkafe6883bb2b0411f8fb29fabcecee381" http://swift.fffee.org/v1/AUTH_test
เราจะได้ผลลัพท์ดังนี้

จะพบว่า x-account-object-count: 0 คือไม่มี object อะไรเลย x-account-container-count: 0 ไม่มี container เก็บข้อมูล และ x-account-bytes-used: 0 ยังไม่มีการใช้พื้นที่อะไรเลย
ใช้ PUT method สร้าง container ชื่อ container1 สำหรับเก็บข้อมูล
curl -X PUT -i -H "X-Auth-Token: AUTH_tkafe6883bb2b0411f8fb29fabcecee381" http://swift.fffee.org/v1/AUTH_test/container1
ผลลัพท์ที่ได้

ใช้ GET method ดูรายการ container ของเรา
curl -X GET -H "X-Auth-Token: AUTH_tkafe6883bb2b0411f8fb29fabcecee381" http://swift.fffee.org/v1/AUTH_test
จะได้ผลลัพท์ดังนี้

เรามี container เก็บข้อมูลแล้วชื่อ container1 ทีนี้มาลองอัพโหลด object ขึ้นไปบ้าง
curl -X PUT -i -T android-auto.mp4 -H "X-Auth-Token: AUTH_tkafe6883bb2b0411f8fb29fabcecee381" http://swift.fffee.org/v1/AUTH_test/container1/android-auto.mp4
จะได้ผลลัพท์ดังนี้

มาลอง list รายการ object ดู
curl -X GET -i -H "X-Auth-Token: AUTH_tkafe6883bb2b0411f8fb29fabcecee381" http://swift.fffee.org/v1/AUTH_test/container1
จะได้ผลลัพท์ดังนี้

การดาวน์โหลดไฟล์มาใช้งานก็ง่ายมากๆ แค่กำหนด output ให้ดังนี้
curl -X GET -H "X-Auth-Token: AUTH_tkafe6883bb2b0411f8fb29fabcecee381" http://swift.fffee.org/v1/AUTH_test/container1/android-auto.mp4 -o androidauto.mp4
เราก็จะได้ไฟล์มาใช้งานกันแล้ว

มาลองลบ object กันดูบ้าง ใช้ DELETE method ดังนี้
curl -X DELETE -i -H "X-Auth-Token: AUTH_tkafe6883bb2b0411f8fb29fabcecee381" http://swift.fffee.org/v1/AUTH_test/container1/android-auto.mp4
ได้ผลลัพท์ดังนี้

มาลองลบ container กันดูบ้าง ใช้ DELETE method ดังนี้
curl -X DELETE -i -H "X-Auth-Token: AUTH_tkafe6883bb2b0411f8fb29fabcecee381" http://swift.fffee.org/v1/AUTH_test/container1
ได้ผลลัพท์ดังนี้

เล่นพอสนุกสนาน วิธีแบบนี้สามารถใช้งานกับ Swift Storage ได้หลายค่าย เช่น Cloud File ของ RackSpace คุณอาจจะประยุกต์ใช้ cURL library เข้ามาทำงานร่วมกับ Swift ได้โดยไม่ต้องพึ่ง SDK ก็ได้