เริ่มต้นที่ tool editor ที่เราจะใช้เขียนก่อนเลยครับ มีให้เลือกใช้หลายตัว แล้วแต่ความชอบความถนัดนะครับ ที่เลือกมานี้คือแบบที่มี plugin support ภาษา dart นะครับ
- webstorm
- visual studio code
- android studio
- Intellij Idea
ส่วนในบทความนี้ผมขอใช้ webstorm นะครับ
เริ่มต้นสร้างโปรเจคก่อนเลยครับ เลือก Dart > Web Server (เลือกแบบอื่นก็ได้ครับ เพราะต้องเขียนใหม่เหมือนกัน)
โปรเจค web server จะได้โครงสร้างไฟล์เริ่มต้นมาแบบนี้ครับ จากนั้นคลิกที่ไฟล์ pubspec.yaml เพิ่มโค้ดเข้าไปที่ dependencies
1 |
rpc: '>=0.5.0 <0.6.0' |
เป็น package RPC ที่ใช้ทำ restful api นะครับ หากถามว่าทำไมต้องใช้ package นี้ มีตัวอื่นให้ใช้หรือไม่ ตอบได้เลยว่ามีครับ เป็นพวก framework เช่น start,angel,redstar ลองค้นใน github ดูจะเจอครับ แต่ที่เลือกใช้ rpc นี้เพราะเป็นแพ็คเกจของทีม dart เองครับ เลยจะรู้สึกอุ่นใจหน่อย ยังไงก็แล้วแต่ความชอบได้เลยนะครับ
จากนั้นคลิกที่ Get dependencies ที่มุมขวาด้านบน เพื่อทำการติดตั้ง package
เมื่อติดตั้งเสร็จแล้ว ให้เปลี่ยนโค้ดในไฟล์ sever.dart ตามนี้
1 2 3 4 5 6 7 8 9 10 |
import 'dart:io'; import 'package:rpc/rpc.dart'; final ApiServer _apiServer = new ApiServer(); main() async { _apiServer.addApi(new Cloud()); HttpServer server = await HttpServer.bind(InternetAddress.ANY_IP_V4, 8080); server.listen(_apiServer.httpRequestHandler); } |
เป็นคำสั่งรัน server ที่ port 8080 นะครับ พร้อมกับใช้งาน api class Cloud ซึ่งจะขีดเส้นแดง นั่นคือเรายังไม่ได้สร้างคลาสตัวนี้ครับ
เราจะทำการสร้างคลาส cloud ครับ คลิกขวาในกรอบโปรเจคเพื่อสร้างไฟล์ api.dart เพิ่มเข้าไปครับ
ข้างในไฟล์มีโค้ดตามนี้ครับ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import 'package:rpc/rpc.dart'; @ApiClass( name: 'api', version: 'v1' ) class Cloud { @ApiResource(name: 'apiResource') MyResource apiResource = new MyResource(); } class MyResource { @ApiMethod(path: 'hello') MessageResponse _() { return new MessageResponse()..result = 'Hello World!'; } } class MessageResponse { String result; } |
ทดสอบรัน โดยคลิกขวาที่ server.dart คลิก Run
พิมพ์ url ดังนี้ http://127.0.0.1:8080/api/v1/hello (api มาจาก name , v1 มาจาก version ใน @ApiClass , hello มาจาก path ใน @ApiMethod)
ปิ๊ง!!! มาแล้วครับ
ทีนี้เรามาดูในโค้ด api.dart กันคร่าวๆ จะมีคลาส Cloud ซึ่งจะเป็น api class ประกอบด้วย Resource ที่เป็นข้อมูล rounting ต่างๆครับ ส่วนคลาส MessageResponse เป็นคลาสที่ใช้กับการแสดงผล response นะครับ ซึ่งสามารถเป็นได้หลายแบบเช่น
1 2 3 4 5 6 |
class ToyResponse { String result; Map<String,MessageResponse> mapResult; List<MessageResponse> datas; } |
ส่วนนี้เป็นการส่งค่ากลับครับ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
@ApiMethod(path: 'return') testResponse _() { var map = { 'bar': new MessageResponse() ..nestedResult = 'somethingNested', 'var': new MessageResponse() ..nestedResult = 'someotherNested' }; return new ToyResponse() ..result ='foo' ..mapResult = map ..datas = [new NestedResponse() ..nestedResult = 'somethingNested',new NestedResponse() ..nestedResult = 'somethingNested']; } |
หวังว่าจะทำให้ทุกๆคนเปลี่ยนมาใช้ Dart กันมากขึ้นนะครับ
ที่มา : https://github.com/dart-lang/rpc
0