Server-Side Integration
dhtmlxScheduler를 백엔드와 연동하는 가장 좋은 방법은 서버에 RESTful API를 구축하고, 클라이언트 측에서 dhtmlxDataProcessor를 사용하는 것입니다.
DataProcessor는 dhtmlxScheduler.js에 포함된 클라이언트 사이드 라이브러리입니다. 이 라이브러리는 데이터 변경 사항을 추적하고, 클라이언트에서 서버로의 요청을 관리합니다.
dhtmlxScheduler는 다양한 프레임워크와 프로그래밍 언어를 통해 REST API로 서버와 연동할 수 있습니다. 아래는 Scheduler 백엔드 연동을 위한 서버 측 구현 예시 목록입니다:
- "dhtmlxScheduler와 PHP:Slim"
- "dhtmlxScheduler와 ASP.NET Core"
- "dhtmlxScheduler와 ASP.NET MVC"
- "dhtmlxScheduler와 Node.js"
- "dhtmlxScheduler와 PHP"
- "dhtmlxScheduler와 PHP:Laravel 연동하기"
- "dhtmlxScheduler와 Ruby on Rails 연동하기"
- "dhtmlxScheduler와 PHP:Slim 3"
기본 원리
일반적으로 REST API를 통해 서버에서 데이터를 로드하려면 아래와 같은 절차를 따릅니다.
클라이언트 측
-
createDataProcessor 메서드를 사용하고, 구성 옵션이 담긴 객체를 전달합니다:
const dp = scheduler.createDataProcessor({
url: "apiUrl",
mode: "REST"
});
또는, 생성자를 사용하여 dataProcessor를 만들고 dhtmlxScheduler 객체에 연결할 수도 있습니다. scheduler.DataProcessor() 생성자는 서버 측 스크립트의 경로를 인자로 받습니다:
scheduler.init("scheduler_here", new Date(), "month");
scheduler.load("apiUrl");
const dp = new scheduler.DataProcessor("apiUrl");
dp.init(scheduler);
자세한 내용은 다음 섹션에서 확인할 수 있습니다.
DataProcessor 생성하기
API 메서드 createDataProcessor를 통해 DataProcessor를 생성할 때 여러 방식으로 파라미터를 전달할 수 있습니다.
- 미리 정의된 요청 모드 중 하나를 사용할 수 있습니다. 예를 들어:
const dp = scheduler.createDataProcessor({
url: "/api",
mode: "REST"
});
여기서:
- url - 서버 측 URL
- mode - 서버로 데이터를 전송하는 방식: "JSON" | "REST-JSON" | "JSON" | "POST" | "GET"
- 커스텀 router 객체를 전달할 수 있습니다:
const dp = scheduler.createDataProcessor(router);
router가 함수일 수도 있습니다:
const server = "/api";
// entity - "event"
// action - "create"|"update"|"delete"
// data - 이벤트 데이터 객체
// id – 처리 중인 객체(이벤트)의 id
const dp = scheduler.createDataProcessor(function(entity, action, data, id) {
switch(action) {
case "create":
return scheduler.ajax.post(
`${server}/${entity}`,
data
);
break;
case "update":
return scheduler.ajax.put(
`${server}/${entity}/${id}`,
data
);
break;
case "delete":
return scheduler.ajax.del(
`${server}/${entity}/${id}`
);
break;
}
});
또는 아래와 같이 객체 형태로도 가능합니다:
const dp = scheduler.createDataProcessor({
event: {
create: function(data) {},
update: function(data, id) {},
delete: function(id) {}
}
});
모든 router 함수는 Promise 또는 데이터 응답 객체를 반환해야 합니다. 이렇게 하면 dataProcessor가 데이터베이스 id를 할당하고 onAfterUpdate 이벤트를 트리거할 수 있습니다.
const router = function(entity, action, data, id) {
return new Promise(function(resolve, reject) {
// … 로직 처리
return resolve({tid: databaseId});
});
}
이 방식을 이용하면 DataProcessor를 localStorage나 특정 URL에 종속되지 않은 저장소에 데이터를 저장하는 데 사용할 수 있으며, 객체 생성과 삭제를 서로 다른 서버(URL)에서 처리할 때도 사용할 수 있습니다.
요청 및 응답 세부사항
URL은 다음 패턴을 따릅니다:
- api/eventId
여기서 "api"는 dataProcessor 구성에서 지정한 URL입니다.
REST 모드
REST 모드를 사용하려면 createDataProcessor 구성 객체의 mode 속성을 "REST"로 설정하세요:
const dp = scheduler.createDataProcessor({
url: "apiUrl",
mode: "REST"
});
일반적인 요청 및 응답은 다음과 같습니다:
| Action | HTTP Method | URL | Response |
|---|---|---|---|
| 데이터 로드 | GET | /apiUrl | JSON format |
| 새 이벤트 추가 | POST | /apiUrl | ("action":"inserted","tid":"eventId") |
| 이벤트 수정 | PUT | /apiUrl/:id | ("action":"updated") |
| 이벤트 삭제 | DELETE | /apiUrl/:id | ("action":"deleted") |
REST-JSON 모드
REST-JSON 모드를 사용하려면 createDataProcessor 구성 객체의 mode 속성을 "REST-JSON"으로 설정하세요:
const dp = scheduler.createDataProcessor({
url: "apiUrl",
mode: "REST-JSON"
});
이 모드에서는 scheduler가 POST/PUT/DELETE 요청을 application/json content type으로 전송합니다.
요청 및 응답 예시는 다음과 같습니다:
| Action | HTTP Method | URL | Request Body | Response |
|---|---|---|---|---|
| 데이터 로드 | GET | /apiUrl | JSON format | |
| 새 이벤트 추가 | POST | /apiUrl | ( "start_date":"2019-12-18 00:00", "end_date":"2019-12-18 00:05", "text":"New event", ... ) | ( "action":"inserted", "tid":"eventId" ) |
| 이벤트 수정 | PUT | /apiUrl/:id | ( "start_date":"2024-12-18 00:00", "end_date":"2024-12-18 00:05", "text":"New event", ... ) | ("action":"updated") |
| 이벤트 삭제 | DELETE | /apiUrl/:id | ("action":"deleted") |