ดึงข้อมูล Bitkub Crypto API มาแสดงบน Flutter App (Flutter Dev)

เนื้อหาบทความนี้ แบ่งออกเป็น

  • ทำความรู้จัก Bitkub
  • ทดสอบเรียก Bitkub RESTful API ด้วย Postman tool
  • เขียน Flutter App ต่อเรียกข้อมูล Bitkub API

ทำความรู้จัก Bitkub

Bitkub ก่อตั้งเมื่อเดือนกุมภาพันธ์ พ.ศ. 2561 และเป็น Exchange Platform รุ่นใหม่สำหรับการซื้อขาย Cryptocurrency และสินทรัพย์ Digital โดยให้บริการเหนือระดับแก่บุคคลทั่วไปให้สามารถซื้อ, ขายและเก็บ Cryptocurrency ได้ตามต้องการ บริษัทเราได้จดทะเบียนอย่างถูกต้องตามกฎหมายด้วยทุนจดทะเบียน 80 ล้านบาท และมีที่ตั้งสำนักงานอยู่ในกรุงเทพฯ ประเทศไทย

Bitkub มี Public API ให้เรียกใช้งาน

Bitkub มีบริการ API ให้เหล่านักพัฒนาได้ลองเรียกใช้งาน จะเป็นแบบ RESful API สามารถเข้าไปดูได้ที่ https://www.bitkub.com/publicapi แบ่งตัว API 2 กลุ่ม คือ

  1. แบบ Non-Secure Endpoint API คือ Public API ที่ไม่ต้องใช้ authentication และเป็น http method แบบ GET ตัวอย่างข้อมูล เช่น
  1. แบบ Secure Endpoint API คือ Secure API ที่ต้องมีการส่ง Server Time ,API Key, API Secret โดยต้องมีการ encode request payload ด้วย Function Hash อย่าง HMAC SHA-256 ในส่วของ Request Body ก่อนการเรียกใช้งาน Secure API ตรงส่วนนี้ ตัวอย่างข้อมูล เช่น

ทดสอบเรียก Public API ผ่าน REST Client Tool (Postman)

ลองเรียก API endpoint ที่เป็นแบบ Non-secure (GET) เรียกข้อมูล crypto symbols ของแต่ละเหรียญ

มาเริ่มเขียน Flutter App ให้เรียก Bitkub API กัน

  1. สมัครสมาชิก bitkub.com ทำการยืนยันการสมัครสมาชิกให้เรียบร้อย
  2. เข้าไปสร้าง bitkub public APIกำหนด permission role ตามที่ต้องการ หรือจะใส่ค่า default ก็ได้ เพราะเราจะ read data อย่างเดียว

3. สร้าง Flutter Project กำหนดโครงสร้าง Project ตามข้างล่างนี้

3.1 เพิ่ม dependencies ในไฟล์ pubspec.yaml

  • http: ^0.12.0+2 : สำหรับใช้เป็น lib จัดการเรื่อง http request ,response ใน code การเรียก API
  • json_serializable: ^3.2.3 : parser JSON Data to Object Class
  • crypto: ^2.1.3 : เพื่อใช้ function HMAC

3.2 สร้าง Flutter widget โดยส่วนหลัก จะมี 3 pages

  • BitkubMenu เพื่อใช้เป็น widget เมนูที่จะมี button 2 buttons
  • NonSecureApiPage เพื่อใช้เป็น Page ดึง Non Secure API ในที่นี้คือดึง symbol ของ crypto มาแสดง (API ไม่ต้อง authen)
  • SecureApiPage เพื่อใช้เป็น Page ดึง Secure API ในที่นี้คือดึง crypto balance ของ crypto มาแสดง (API จำเป็นต้องส่งข้อมูล authentication แนบไปด้วย)

3.3 สร้าง dto (data transfer object) เอาไว้ mapping json to object class 3 files

  • balance.dart
  • symbol.dart
  • config.dart

3.4 สร้าง service class เพื่อใช้เป็น service handle http client ต่อ Bitkub API ให้ชื่อว่า bitkub_service.dart

3.5 สร้าง coin_security.dart ใช้สำหรับ hash HMAC authen

3.6 app_config.dart ใช้เป็น config handle เรื่อง read config file มาใช้ใน project

4. อธิบายส่วนการเรียก Bitkub API

  • Non Secure API ส่วนนี้ไม่ยุ่งยากอะไรเพราะมองเป็น API ที่ไม่ต้องใส่ authenticate secure เรียกผ่าน method GET ได้เลย ขั้นตอนส่วนนี้จะอยู่ใน function getSymbols()
  • Secure API ส่วนนี้จะมีความยุ่งยากนิดนึง เพราะจำเป็นต้องแนบ authen ไปด้วย
    1. เรียก function getServerTime() เก็บค่า time server ของ API ไว้ก่อน (ใช้ในขั้นตอนถัดไป)
    2. เพิ่ม header “X-BTK-APIKEY” ใส่ value เป็น bitkub api key
    3. เข้ากระบวนการ hash HMAC โดยใช้ข้อมูล servertime (ได้จาก 1.) จะถูกสร้างเป็น request body ที่ชื่อว่า “ts” พร้อมใส่ api secret ผลลัพธ์ที่ได้จะเป็น HASH String 1 ชุด เก็บไว้เป็น request body ที่ชื่อว่า “sig”
    4. ส่งข้อมูล request เหล่านี้ไปแบบ method POST จากนั้นจะได้ response กับมาเป็นข้อมูล market balance ของ crypto ณ ปัจจุบัน code ส่วนนี้จะอยู่ใน function getCoinsBalance()

4.1 API Error Code ที่จะคอยบอกเราได้ว่า call API เกิด Error ทางฝั่ง server ว่าอย่างไร มี Error Code จาก server ที่คอยบอกเราได้

สำหรับเพื่อน ๆ คนใดอยากได้ sourcecode เพื่อลองเอาไป run ทดสอบเอง ผมจะแปะลิ้ง github ไว้ที่ตรงนี้ bitkubapi-flutter ก่อน run แก้ให้ไปแก้ config.json ตรงส่วน api key , api secret ก่อนรันด้วยนะจร้า

Written by

Senior Developer @Telecom, Full Stack Developer [Subscribe Me @poolsawat.com]

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store