หลังจากทำ BPMN ที่เป็น Servicer Task เสร็จและ โดยลองใช้ Mock REST-API จาก http://www.mocky.io เพื่อ POC (Proof of concept) แล้วนั้น สิ่งถัดมาที่ผมทำ คือ ต้องมาลองสร้างข้อมูลให้มัน Dynamic มากก่านี้ครับ ซึ่งผมได้เจอ Open Source ตัวนึงที่น่าสนใจมากครับ แท่นแท๊นนน มัน คือ JSON Server ครับ เป็น Tools ที่เกิดมาเพื่อทำ Mock REST-API โดยแท้เลยครับ มันเลยเป็นที่มาของ Blog ตอนนี้ด้วยครับ
สิ่งที่ต้องมี
- node.js ครับ เพราะต้องใช้คำสั่ง npm install ครับ ถ้าใครเพิ่งลงก็อย่าลืม Log-off และ Log-on เครื่องใหม่ หรือเอาง่ายสุด Restart เครื่องครับ
- Internet เอาไว้สำหรับ Download Tools ครับ
- data สำหรับ Test ครับ API แต่ละตัว ต้อง Return อะไรมาบ้างครับ
ลุยเลยครับ
- ติดตั้ง JSON Server ด้วยคำสั่ง npm install -g json-server ** ผมใส่ -g เพราะต้องการให้เป็น Global ใช้งานได้กับทั้งเครื่องผมครับ
- รอไปสักพัก
- ทดสอบ โดยการลองพิมพ์ json-server จะพบ help ขึ้นมาครับ ดังรูป
- จะลองส่อง Version ก็ได้ครับ โดยใช้คำสั่ง json-server --version ผลลัพธ์ที่ได้
สร้าง db.json
- ไฟล์ db.json เป็นไฟล์ที่เก็บข้อมูลการ Mock ของ API แต่ละอันครับ
{ "requests": [ { "id": 1, "projectId": 123, "requestId": "CUQ-5248", "requestby": "mary", "requesttime": "2018-05-23T18:25:43.511Z", "requeststatus": "wait-for-proceed", "requestitem": [ { "itemname": "DELL Server", "itemtype": "goods", "itemqty": 2, "itemamt": 255000 }, { "itemname": "DELL Inspiron 5570", "itemtype": "goods", "itemqty": 10, "itemamt": 25000 }, { "itemname": "ERP System Implementation", "itemtype": "services", "itemqty": 1, "itemamt": 30000 } ] }, { "id": 2, "projectId": 124, "requestId": "CUQ-5249", "requestby": "mary", "requesttime": "2018-05-23T18:25:43.511Z", "requeststatus": "wait-for-proceed", "requestitem": [ { "itemname": "DELL Server", "itemtype": "goods", "itemqty": 2, "itemamt": 255000 }, { "itemname": "DELL Inspiron 5570", "itemtype": "goods", "itemqty": 10, "itemamt": 25000 }, { "itemname": "ERP System Implementation", "itemtype": "services", "itemqty": 1, "itemamt": 30000 } ] }, { "id": 3, "projectId": -1, "requestId": "-1", "requestby": "-", "requesttime": "2018-05-23T18:25:43.511Z", "requeststatus": "wait-for-proceed", "requestitem": [] } ], "projects": [ { "id": 123, "projectId": 123, "avaliableBudget": 30000 }, { "id": 124, "projectId": 124, "avaliableBudget": 300000 } ] }
- อย่างไฟล์ตัวอย่างด้านบน มี API ของ requests และ projects ครับ
- NOTE: ถ้าสังเกตุดีๆ พบว่ามี Property Id ที่ต้องอยู่ใน db.json อาจจะงงว่าทำต้องใช้ Id เพราะมันเป็ฯที่นิยมในการใช้ครับ แต่จริงๆ มัน Custom ได้จากคำสั่ง json-server --id ครับ
Deploy Mock API
- เมื่อมีไฟล์ db.json แล้ว จะรออะไรหละครับ CD เข้าไปที่ Path ที่เก็บไฟล์ แล้ว Start Server ขึ้นมาเลยครับ ด้วยคำสั่ง json-server --watch db.json ตอนนี้ตัว JSON Server สร้าง API ขึ้นมา 2 ตัวครับ คือ requests และ projects ดังรูปครับ
- ถ้าลองเข้าที่ http://localhost:3000/requests พบข้อมูลที่เรา Mock ไว้ ดังรูปครับ
ทดสอบผ่าน Postman บ้างครับ
- Postman เป็น Tools ที่เข้ามาช่วยจัดการ API-Test เลยครับ
กรณีทดสอบของ Mock API ครับ
- ดึงข้อมูล requests ตาม id
- คำสั่ง GET: http://localhost:3000/requests/1
- คำสั่ง GET: http://localhost:3000/requests/1
- ดึงข้อมูล projects ตาม id
- คำสั่ง GET: http://localhost:3000/projects/123
- คำสั่ง GET: http://localhost:3000/projects/123
- ดึงข้อมูล request ที่ requeststatus มีค่าเท่ากับ "wait-for-proceed"
- คำสั่ง GET: http://localhost:3000/requests?requeststatus=wait-for-proceed
- คำสั่ง GET: http://localhost:3000/requests?requeststatus=wait-for-proceed
- ดึงข้อมูล request ที่ requeststatus มีค่าเท่ากับ "wait-for-proceed" โดยเรียงตาม Id จาก มากไปน้อย DESC
- คำสั่ง GET: http://localhost:3000/requests?requeststatus=wait-for-proceed&_sort=id&_order=desc
- คำสั่ง GET: http://localhost:3000/requests?requeststatus=wait-for-proceed&_sort=id&_order=desc
- ดึงข้อมูล request ที่ requeststatus มีค่าเท่ากับ "wait-for-proceed" โดยเรียงตาม Id จาก มากไปน้อย ASC ที่ละ 1 รายการ
- คำสั่ง GET: http://localhost:3000/requests?requeststatus=wait-for-proceed&_sort=id&_order=asc&_limit=1
- คำสั่ง GET: http://localhost:3000/requests?requeststatus=wait-for-proceed&_sort=id&_order=asc&_limit=1
- Update ข้อมูล request ที่ Id = 1 ให้ requeststatus มีค่าเท่ากับ "completed"
- คำสั่ง PATCH: http://localhost:3000/requests/1
- จากอันเมื่อกี้จริงๆ ส่งคำสั่ง PUT ก็ได้นะ แต่ PUT ต้องส่งไปทั้ง Object เท่านั้น โดย Object ที่ส่งไป
- ถ้า PATCH
{ "requeststatus": "completed" }
- ถ้า PUT
{ "id": 1, "projectId": 123, "requestId": "CUQ-5248", "requestby": "mary", "requesttime": "2018-05-23T18:25:43.511Z", "requeststatus": "completed", "requestitem": [ { "itemname": "DELL Server", "itemtype": "goods", "itemqty": 2, "itemamt": 255000 }, { "itemname": "DELL Inspiron 5570", "itemtype": "goods", "itemqty": 10, "itemamt": 25000 }, { "itemname": "ERP System Implementation", "itemtype": "services", "itemqty": 1, "itemamt": 30000 } ] }
- ถ้า PATCH
- คำสั่ง PATCH: http://localhost:3000/requests/1
- เพิ่ม Request บ้าง
- คำสั่ง POST: http://localhost:3000/requests/
- คำสั่ง POST: http://localhost:3000/requests/
- NOTE: พวก PATCH / POST / PUT อย่าลืมกำหนด Content-Type ด้วยนะครับ
- ลบ Request ที่ Id มีค่าเท่ากับ 5 ออก
- คำสั่ง DELETE: http://localhost:3000/requests/5
- คำสั่ง DELETE: http://localhost:3000/requests/5
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.