Data Tranfer Object (DTO) Access
จุดประสงค์
เพื่อให้ developer สามารถเข้าถึงการเรียกข้อมูล LUT, MASTER จากเดิมที่ทำผ่าน stored procedure เป็นการเรียกโดยตรงผ่าน API และลดจำนวน request ลงด้วยการเข้าถึง LUT, MASTER หลายตัวพร้อมกันได้ใน request เดียวกัน
การติดตั้ง
เป็น optional service สามารถเลือกมาลงเพิ่มใน project ได้ผ่าน nuget package
dotnet package add AtlasX.DtoAccess.Serviceหากต้องการ TypeScript definition ของ LUT, MASTER เพื่ออำนวยความสะดวก Developer ในการพัฒนา (สำหรับ development environment เท่านั้น)
dotnet package add AtlasX.DtoAccess.Schemaการเปิดใช้งาน
สำหรับ ASP.NET Minimal API (Program.cs)
using AtlasX.DtoAccess.Service;
using AtlasX.DtoAccess.Schema;
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDtoAccess();
builder.Services.AddDtoSchema();
var app = builder.Build();
app.UseDtoAccess(); <em>// default ที่ /api/dto สามารถเปลี่ยน path หลัง /api/ ได้ด้วยการใส่ parameter ที่ UseDtoAccess เช่น app.UseDtoAccess("dto-access");</em>
app.UseDtoSchema(); <em>// default ที่ /api/dto-schema สามารถเปลี่ยน path หลัง /api/ ได้ด้วยการใส่ parameter ที่ UseDtoSchema เช่น app.UseDtoSchema("dto-schema-access");</em>
}สำหรับ ASP.NET เดิม (Startup.cs)
using AtlasX.DtoAccess.Service;
using AtlasX.DtoAccess.Schema;
public void ConfigureServices(IServiceCollection services)
{
services.AddDtoAccess();
services.AddDtoSchema();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseEndpoints(endpoints => {
endpoints.UseDtoAccess();
endpoints.UseDtoSchema();
});
}คอนฟิก appsettings
{
"WebServiceSettings": {
"DtoAccess": {
"DefaultDataSource": "Default",
"MaxTablePerRequest": 10,
"AllowTables": {
"UM_ROLE": {
"DataSource": "SQLServer",
"AlwaysExcludeFields": ["DATE_CREATED", "DATE_MODIFIED"]
},
"UM_FUNCTION": {
"AllowConditionFields": ["FUNCTION_ID", "FUNCTION_PARENT", "ORDER_NO"]
}
}
}
}
}DtoAccess
| Key | Value | Description |
|---|---|---|
| DefaultDataSource | Default | dbaccess datasource ที่ DtoAccess service เลือกใช้เป็นค่ามาตรฐานหากไม่มีการกำหนดให้ในระดับ table |
| MaxTablePerRequest | 10 | จำนวน table สูงสุดที่อณุญาตให้เข้าถึงต่อ 1 request |
| AllowTables | table ที่อณุญาตให้เข้าถึงผ่าน DtoAccess | |
| DataSource | dbaccess datasource ที่จะให้ DtoAccess service ใช้กับ table นั้นๆ | |
| AlwaysExcludeFields | กำหนด field ที่ไม่ต้องการแสดงในผลลัพธ์เสมอ | |
| AllowConditionFields | เปิดให้สามารถกรองผลลัพธ์ด้วยเงื่อนไขตาม field ที่กำหนดไว้เท่านั้น |
Form Parameters
*การระบุ field เงื่อนไขที่ Key ด้วยชื่อซ้ำกันแต่ค่าต่างกันจะเป็นการกำหนดเงื่อนไขโดยใช้ IN แทนการใช้ = **หากไม่ระบุ field ที่ Value จะแสดงทุก field ในผลลัพธ์
| Key | Value |
|---|---|
| UM_ROLE | |
| UM_FUNCTION?FUNCTION_PARENT=GIS-01&FUNCTION_PARENT=GIS-02 | FUNCTION_ID,FUNCTION_NAME,FUNCTION_PARENT |
curl --location 'https://atlasx.cdg.co.th/axws-demo/api/dto' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'UM_ROLE=' \
--data-urlencode 'UM_FUNCTION%3FFUNCTION_PARENT%3DGIS-01%26FUNCTION_PARENT%3DGIS-02=FUNCTION_ID,FUNCTION_NAME,FUNCTION_PARENT'{
"success": true,
"total": 5,
"message": "",
"data": [],
"UM_ROLE": [
{
"ROLE_ID": 1,
"ROLE_NAME": "Super Administrator",
"ROLE_DETAIL": "มีสิทธิ์ใช้งานทุกฟังก์ชัน",
"USER_CREATED": null,
"USER_MODIFIED": 1
},
{
"ROLE_ID": 3,
"ROLE_NAME": "Geust User",
"ROLE_DETAIL": "กลุ่มสำหรับใช้สิทธิ์ฟังก์ชันพื้นฐานสำหรับผู้ใช้งานทั่วไป เช่น ผู้ใช้งานที่ไม่ได้ล็อกอินเข้าระบบ เป็นต้น",
"USER_CREATED": 1,
"USER_MODIFIED": null
}
],
"UM_FUNCTION": [
{
"FUNCTION_ID": "GIS-02",
"FUNCTION_NAME": "Routing",
"FUNCTION_PARENT": "GIS-01"
},
{
"FUNCTION_ID": "GIS-03",
"FUNCTION_NAME": "Buffer",
"FUNCTION_PARENT": "GIS-01"
},
{
"FUNCTION_ID": "GIS-04",
"FUNCTION_NAME": "Feedback",
"FUNCTION_PARENT": "GIS-02"
}
]
}DTO Schema Service
Query Parameters
*หากต้องการจำกัด field ที่แสดงใน TypeScript definition ให้ส่ง outFields **หากต้องการทุก field ไม่ต้องส่ง outFields
| Key | Value |
|---|---|
| outFields | FUNCTION_ID,FUNCTION_NAME,FUNCTION_PARENT |
curl --location 'https://atlasx.cdg.co.th/axws-demo/api/dto-schema/UM_FUNCTION?outFields=FUNCTION_ID%2CFUNCTION_NAME%2CFUNCTION_PARENT'export interface UM_FUNCTION {
FUNCTION_ID: string;
FUNCTION_NAME: string;
FUNCTION_PARENT: string;
}