การใช้ CData API Server ใน EC2

ครั้งนี้จะมาทำการติดตั้งและตั้งค่า CData API Server ใน Microsoft Windows Server บน EC2 และจะสร้าง REST API โดยใช้ CData API Server แล้วทดสอบการรับ-ส่งข้อมูลจาก JavaScript

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ครั้งนี้ผมจะมาเขียนบทความ การใช้ CData API Server ใน EC2

สิ่งที่ต้องมี

  • Microsoft Windows Server บน EC2 ที่เชื่อมต่อกับ Aurora Serverless แล้ว
  • Aurora Serverless ที่ Import ข้อมูลแล้ว
  • ติดตั้งและตั้งค่า CData API Server ใน Microsoft Windows Server บน EC2 แล้ว

Server (CData API Server)

EC2 (Windows): Microsoft Windows Server บน EC2

Database Server

Database: RDS Aurora
Data: Example Databases

ขั้นตอนการเตรียม

ตัวอย่างตั้งค่าการสร้าง Microsoft Windows Server ใน EC2

※Create Key pairs
Key pairs:tinnakorn-cdata-api-server(ตั้งชื่อที่ต้องการ)
Key pair type:RSA
Private key file format: ◉pem

※Launch instances
Name and tags
Name:tinnakorn-cdata-api-server(ตั้งชื่อที่ต้องการ)

Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):Microsoft Windows Server 2022 Base

Instance type
Instance type:t3a.medium

Key pair (login)
Key pair name - required:tinnakorn-cdata-api-server(key pair ที่สร้างขึ้นเมื่อสักครู่นี้)

Network settings
Firewall (security groups)
Security group name - required:tinnakorn-cdata-api-server(ตั้งชื่อที่ต้องการ)
Description - required:tinnakorn-cdata-api-server(ป้อนตามต้องการ)
Inbound security groups rules
Security group rule 1 (TCP, 3389, xxx.xxx.xxx.xxx/32)
Type:rdp| Source type:My IP| Source:xxx.xxx.xxx.xxx/32

Configure storage
1x:30GiBgp2 Root volume (Default)

ตัวอย่างตั้งค่าการสร้าง RDS Aurora ในบทความนี้

※Create Security Group สำหรับ RDS Aurora
Basic details
Security group name:tinnakorn-cdata-api-server-db(ตั้งชื่อที่ต้องการ)
Description:tinnakorn-cdata-api-server-db(ป้อนตามต้องการ)

Inbound rules
Type:MYSQL/Aurora| Source:Custom|tinnakorn-cdata-api-server(พิมพ์ค้นหาชื่อ EC2 ที่จะใช้แล้วเลือก) → sg-ab12cd34xxxx

※Create RDS Aurora
Engine options
Engine type:Amazon Aurora
Edition:Amazon Aurora MySQL-Compatible Edition
Available versions:Aurora (MySQL 5.7) 2.07.1

Templates
⦿Production

Settings
DB instance identifier:tinnakorn-cdata-api-server-db
Credentials Settings
Master username:admin
Master password:PassW0rd(รหัสผ่านนี้เป็นแค่ตัวอย่าง ให้ตั้งรหัสผ่านที่ต้องการ)
Confirm password:PassW0rd

Instance configuration
DB instance class
◉ Serverless
Serverless v1
Capacity range
Minimum ACUs:1 ACU
Maximum ACUs:1 ACU
Additional scaling configuration
Autoscaling timeout and action:00:05:00
Pause after inactivity:✅ Scale the capacity to 0 ACUs when cluster is idle
00:05:00

Connectivity
Existing VPC security groups:tinnakorn-cdata-api-server-db(เลือก security group ที่เราสร้างสำหรับ RDS Aurora)
Additional configuration
Web Service Data API:✅ Data API

การเชื่อมต่อ Database และ Import Data ไปยัง RDS Aurora

ดูตัวอย่างที่นี่เฉพาะหัวข้อนี้: การ Import ข้อมูลจาก MySQL Workbench บน Windows ไปยัง RDS Aurora

เมื่อเตรียมสภาพแวดล้อมการทำงานตามที่กล่าวมาในขั้นตอนนี้ทั้งหมดเสร็จเรียบร้อยแล้ว ต่อไปเราจะมาเริ่มใช้งาน CData API Server ใน Microsoft Windows Server บน EC2 กันครับ

ขั้นตอนต่อไปนี้ จะดำเนินการใน Remote Desktop Connection ทั้งหมด

การติดตั้ง CData API Server

คัดลอกลิงก์ด้านล่างนี้ไปเปิดที่ Microsoft Edge ใน Remote Desktop Connection แล้วเลือก Download API Server:Windows (.NET)(เมื่อคลิกปุ่ม Download แล้วให้ใส่ Email เพื่อดาวน์โหลด)

https://www.cdata.com/apiserver/download/

เมื่อดาวน์โหลดแล้ว ให้เริ่มทำการติดตั้งโดยเปิดCDataAPIServer.exeขึ้นมา แล้วคลิกNext >

คลิกI Agree

เลือกโฟลเดอร์ปลายทางการติดตั้ง ในตัวอย่างนี้จะไม่เปลี่ยนแปลงอะไร แล้วคลิกNext >

ไม่ต้องเปลี่ยนแปลงอะไร คลิกNext >ได้เลย

เลือก Start Menu Folder ในตัวอย่างนี้จะไม่เปลี่ยนแปลงอะไร แล้วคลิกNext >

ต้องตั้ง Password เพื่อใช้สำหรับป้อนในหน้า Login ของ CData API Server เพื่อเข้าใช้งาน แล้วคลิกNext >

คลิกInstallแล้วรอให้ระบบติดตั้งสักครู่

แล้วคลิกFinish

การเข้าสู่ระบบ CData API Server

เมื่อติดตั้งเสร็จเรียบร้อยแล้ว คลิกที่ปุ่มไอคอนWindowsแล้วคลิกโฟลเดอร์CData APIServerและคลิกStart API Serverได้เลย

รอสักครู่แล้วจะเข้ามาที่หน้า Login โดยอัตโนมัติ จากนั้นให้ใส่ Password ตามที่เราตั้งค่าไว้ตอนที่ติดตั้ง Windows (.NET) เมื่อสักครู่นี้ แล้วคลิก→] Sign in

เมื่อเข้ามาแล้วจะแสดงหน้าจอแบบนี้ ซึ่ง API Server จะเริ่มทำงานหลังจากที่เราติดตั้งเสร็จเรียบร้อยแล้ว

การตั้งค่า CData API Server

การลงทะเบียนการทดลองใช้งานฟรี 30 วัน

คลิกแท็บABOUTแล้วเลือกตามประเภทการใช้งานของเรา
ตัวอย่างนี้จะเลือกActivate 30-Day Trial

แล้วป้อน Name และ Email เพื่อลงทะเบียนการทดลองใช้งานฟรี 30 วัน แล้วติ๊กI agree to the และคลิกActivate Trial

ทดสอบการเชื่อมต่อกับ MySQL

ต่อไปเลือกแท็บSETTINGSแล้วเลือกConnectionsและคลิก+ Add Connection...

แล้วเลือก Database ที่ต้องการทำเป็น REST API ครั้งนี้จะเลือกMySQL

ตัวอย่างการตั้งค่า Server ของตัวอย่างนี้
» Server: ป้อน Endpoint ของ RDS Aurora
» Database: ป้อนชื่อworldที่ได้ทำการ Import ใน MySQL WorkBench
» User:admin(Username ของ RDS Aurora)
» Password:PassW0rd(Password ของ RDS Aurora)
» เมื่อป้อนข้อมูลเสร็จแล้ว ให้ทดสอบการเชื่อมต่อโดยคลิกTest Connection
» ถ้าทดสอบสำเร็จแล้ว ให้คลิกSave Changes

ตอนนี้การตั้งค่าการเชื่อมต่อเสร็จสมบูรณ์แล้ว

การเพิ่ม Resources

ต่อไปเลือกแท็บResourcesและคลิกAdd Resource...

รายการของ MySQL ที่สามารถเชื่อมต่อ Data ได้ จะแสดงออกมาที่หน้าจอ
จากนั้นเลือก MySQL ที่ตั้งค่าเมื่อสักครู่นี้ แล้วคลิก→ Next

รายการ Table จะแสดงออกมาที่หน้าจอ
จากนั้นให้เลือก Table ที่ต้องการเปลี่ยนเป็น REST API และคลิก→ Next

เปลี่ยนชื่อ Resource Name แนะนำให้เปลี่ยนเป็นชื่อที่เข้าใจง่าย (ตัวอย่างนี้คือworld_city)
จากนั้นดูที่รายการของ Column Name ที่แสดงอยู่ด้านล่าง เราสามารถเลือก Column Name ตามต้องการได้
นอกจากนี้ Operations สามารถเลือกติ๊กตามช่องที่ต้องการได้ ดังนั้นให้เปลี่ยนตามความเหมาะสม
เมื่อเสร็จเรียบร้อยแล้ว คลิกSave

เมื่อการเพิ่ม Resource เสร็จเรียบร้อยแล้ว Resource ที่ลงทะเบียนเมื่อสักครู่นี้จะแสดงในรายการบนหน้าจอแบบนี้

การตรวจสอบ Resources ใน API

เมื่อตั้งค่าสำหรับการทำเป็น REST API เสร็จแล้ว ต่อไปจะทำการตรวจสอบ Resources ใน API
โดยเลือกแท็บAPIแล้วดูที่ Resources จะเห็น /api.rsc/your_resource แสดงขึ้นมา (ตัวอย่างนี้คือ /api.rsc/world_city)

แล้วเลือก/api.rsc/your_resourceจากเมนูด้านซ้าย HTTP Methods ก็จะแสดงขึ้นมา
จากนั้นคลิกGET http://localhost:8153/api.rsc/your_resource/ +

เมื่อขยายส่วนของ GET แล้ว โค้ดตัวอย่างใน Javascript ก็จะแสดงขึ้นมา
นอกจาก Javascript แล้ว ยังมี cURL ด้วยเช่นกัน

การเพิ่ม Users

ต่อไปคือการเพิ่ม User ที่สามารถเรียกใช้ REST API ได้

เลือกแท็บSETTINGSด้านบนสุด แล้วเลือกแท็บUsersและคลิก+ Add

เราสามารถตั้งค่า เช่น การอนุญาต Method ต่างๆกับ User และวันหมดอายุของ Token ได้
ทีนี้ให้เราตั้งชื่อUser or GroupและToken Lifetime (days)(ถ้าตั้งค่าเป็น 0 ก็จะเป็นไม่มีวันหมดอายุ)
จากนั้นคลิกSave Changes

เมื่อเสร็จแล้วจะเห็น Authtoken แสดงในรายการแบบนี้ ดังนั้นให้เชื่อมต่อโดยใช้ Authtoken ของอันนี้ในตอนที่เรียกใช้ REST API

การเปิดใช้งาน CORS

เปิดการใช้งานการตั้งค่า CORS ใน CData API Server โดยเข้ามาที่ "SETTINGS > Server"
แล้วติ๊กEnable cross-origin resource sharing (CORS)
แล้วใส่*ที่ Access-Control-Allow-Origin และคลิกSave Changes

เพียงเท่านี้การตั้งค่า Server ของการเปลี่ยนเป็น REST API และการออก Authtoken ก็เสร็จสมบูรณ์แล้ว
ในขั้นตอนถัดไปเราจะมาตรวจสอบว่าจะได้รับการตอบกลับโดยเรียกใช้ REST API ได้จริงหรือไม่

การเตรียม HTML สำหรับการเรียกใช้จริง

ข้อควรระวัง: ให้เปลี่ยน url: ใน ajax (ตรวจสอบ url ได้ที่ "API > Resources") และเปลี่ยน 'x-cdata-authtoken' โดยระบุ Authtoken ที่ได้รับตามจริง (ตรวจสอบ Authtoken ได้ที่ "SETTINGS > Users") (ตอนเปลี่ยนข้อมูลให้ลบ [ ] ออกด้วย)

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Example</title>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

<script>
$.ajax({
    type: 'GET',
    url: 'http://localhost:8153/api.rsc/[your_resource]/',
    headers: {
        'x-cdata-authtoken':'[your_authtoken]',
        'Content-Type':'application/json;charset=utf-8'
    }
}).done(function(data) {

        $("#myRESTData").html(JSON.stringify(data,null,"\t"));
});

</script>
</head>

<body>
<pre id="myRESTData">
</pre>
</body>
</html>

ทดสอบการดำเนินการ

ผลการดำเนินการของ HTML เมื่อสักครู่นี้ จะแสดงตามด้านล่างนี้

url: 'http://localhost:8153/api.rsc/world_city/'

Request ด้านบนนี้ เราจะได้รับข้อมูลทุกรณีหรือได้รับข้อมูลทั้งหมดนั่นเอง
ในส่วนของ CData API Server มี Parameters ที่สามารถใช้ได้หลายตัว

$select Properties ที่จะส่งออกนั้นจะคั่นด้วยเครื่องหมายจุลภาค โดยค่าเริ่มต้น Properties จะถูกส่งออกทั้งหมด
$filter filter ที่ใช้กับผลลัพธ์ของ entity นี้ ตัวอย่างเช่น หากต้องการดึงข้อมูลรายการทั้งหมดที่แก้ไขหลังจาก ModifiedDate เฉพาะ เราจะต้องตั้งค่า $filter เป็นค่า [ModifiedDate gt 'yyyy-MM-dd']
$orderby   Properties ที่จะใช้เมื่อต้องการเรียงผลลัพธ์
$top จำนวนสูงสุดของรายการที่จะส่งคืน
$skip จำนวนรายการที่จะข้ามเมื่อเลือกผลลัพธ์

กรณีที่ต้องการกรองข้อมูล

Parameters:$filter

ทีนี้เรามาลองส่งคืนเฉพาะข้อมูลในคอลัมน์ "CountryCode" ของประเทศ "THA" โดยใช้ $filter กันครับ
[CountryCode = column_name, THA = value] (อย่าลืมเปลี่ยน url: และ 'x-cdata-authtoken' ให้เป็นข้อมูลของคุณ!)

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Example</title>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>

<script>
$.ajax({
    type: 'GET',
    url: 'http://localhost:8153/api.rsc/[your_resource]/?$filter=CountryCode eq "THA"',
    headers: {
        'x-cdata-authtoken':'[your_authtoken]',
        'Content-Type':'application/json;charset=utf-8'
    }
}).done(function(data) {

        $("#myRESTData").html(JSON.stringify(data,null,"\t"));
});

</script>
</head>

<body>
<pre id="myRESTData">
</pre>
</body>
</html>

จะเห็นว่าผลการตอบรับนั้นส่งคืนกลับมาโดยกรองข้อมูล CountryCode: THA ตามด้านล่างนี้

กรณีที่ต้องการรับแค่ TOP2

Parameters:$top

url: 'http://localhost:8153/api.rsc/[your_resource]/?$top=2'

กรณีที่ต้องการรับแค่ column ที่ระบุ เช่น (CountryCode,Population)

Parameters:$select

url: 'http://localhost:8153/api.rsc/[your_resource]/?$select=CountryCode,Population',

กรณีที่จะระบุ Parameter รวมกัน

Parameters:$select, $top

เราสามารถระบุได้โดยคั่นด้วยเช่น$select=[column1,column2]&$top=[number]

url: 'http://localhost:8153/api.rsc/[your_resource]/?$select=CountryCode,Population&$top=2',

ผลลัพธ์เหล่านี้ก็จะส่งคืนกลับมาตาม Parameters ที่เราเรียกใช้ครับ

ความรู้เพิ่มเติม: การเผยแพร่ API ไปยังภายนอก

REST API ที่สร้างด้วย CData API Server ในการตั้งค่านี้ สามารถใช้ได้แค่ใน Windows Server
กรณีที่ต้องการเผยแพร่สิ่งนี้ ให้ทำการเผยแพร่ด้วย Port:8153ไปยังภายนอกโดยใช้ Security Group

การตั้งค่านี้จะใช้ Anywhere-IPv4:0.0.0.0/0เพื่อให้ได้รับการเข้าถึงจาก IP Address ทั้งหมด
กรณีที่จะทำให้สามารถเข้าถึงแค่จาก IP Address ที่เจาะจงนั้น ให้เปลี่ยนการตั้งค่าเป็นการระบุ IP Address

นอกจากนี้ Windows Server จะ Stop ด้วยการตั้งค่านี้ และเมื่อ Start ขึ้นมาใหม่ IP Address จะเปลี่ยนไป
อย่างไรก็ตาม เราสามารถล็อก IP Address ได้ด้วยการตั้งค่า Elastic IP โดยดูตัวอย่างได้ที่บทความด้านล่างนี้

ทีนี้เราก็สามารถเผยแพร่ REST API ที่สร้างโดย CData API Server ได้แล้ว

สรุป

จากที่ผมได้ลองใช้งาน CData API Server แล้ว ผมคิดว่าใช้งานง่ายมากๆ เพราะมีฟังก์ชันมากมายให้เราเลือกใช้งานและสามารถปรับแต่งให้เข้ากับ Environment ของเราได้ ซึ่งในตัวอย่างนี้เป็นการใช้งาน CData API Server ใน EC2 แล้วสร้าง REST API เพื่อให้สามารถรับ-ส่งข้อมูลจาก JavaScript ได้
อย่างไรก็ตาม ถึงแม้การตั้งค่าจะสามารถทำได้ง่ายๆ แต่เราต้องคำนึงถึงความปลอดภัยในการตั้งค่าต่างๆเป็นหลักด้วยครับ

ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ

POP จากบริษัท Classmethod (Thailand) ครับ !

Link อ้างอิง