---
url: 'https://dxpr.com/ko/hc/documentation/learn-dxpr-builder/development/api'
title: 'API 참조 | DXPR'
author:
  name: Jurriaan
  url: 'https://dxpr.com/users/jurriaan'
date: '2026-10-24T01:40:28+00:00'
updated: '2026-10-24T09:09:48+00:00'
copyright: 'Copyright DXPR. All rights reserved.'
type: article
summary: |-
  DXPR Builder가 정의하는 PHP 서비스, JavaScript 확장 지점, 경로.
  서비스 ID는 dxpr_builder.services.yml에서, 경로는 dxpr_builder.routing.yml에서
  옵니다. 각 경로의 요청 및 응답 자세한 내용은
  API 엔드포인트를 보세요.
tags:
  - 'Architectuur en API’s'
image: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
published: true
og:
  site_name: DXPR
  updated_time: '2026-10-24T09:09:48+0000'
  'image:alt': 'DXPR, powered by Drupal: AI-powered Drupal for marketers.'
schema:
  '@context': 'https://schema.org'
  '@graph':
    -
      mainEntity: {  }
    -
      '@type': TechArticle
      headline: 'API 참조'
      description: |-
        DXPR Builder가 정의하는 PHP 서비스, JavaScript 확장 지점, 경로.
        서비스 ID는 dxpr_builder.services.yml에서, 경로는 dxpr_builder.routing.yml에서
        옵니다. 각 경로의 요청 및 응답 자세한 내용은
        API 엔드포인트를 보세요.
      image:
        '@type': ImageObject
        url: 'https://dxpr.com/themes/custom/dxpr_com/images/dxpr-share-card.jpg'
        width: '1200'
        height: '630'
      datePublished: '2026-10-24T01:40:28+0000'
      dateModified: '2026-10-24T09:09:48+0000'
      author:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
        url: 'https://dxpr.com/'
        logo:
          '@type': ImageObject
          url: 'https://dxpr.com/themes/custom/dxpr_com/dxpr-logo-dark.svg'
          width: '1348'
          height: '501'
      mainEntityOfPage: 'https://dxpr.com/ko/hc/documentation/learn-dxpr-builder/development/api'
      articleSection: 'Architectuur en API’s'
    -
      '@type': WebPage
      '@id': 'https://dxpr.com/ko/hc/documentation/learn-dxpr-builder/development/api'
      description: |-
        DXPR Builder가 정의하는 PHP 서비스, JavaScript 확장 지점, 경로.
        서비스 ID는 dxpr_builder.services.yml에서, 경로는 dxpr_builder.routing.yml에서
        옵니다. 각 경로의 요청 및 응답 자세한 내용은
        API 엔드포인트를 보세요.
      breadcrumb:
        '@type': BreadcrumbList
        itemListElement:
          -
            '@type': ListItem
            position: 1
            name: 홈
            item: 'https://dxpr.com/ko'
      publisher:
        '@type': Organization
        '@id': 'https://dxpr.com/#organization'
        name: DXPR
      inLanguage: ko
---
[Help Center](/ko/node/75)/[Documentation](/ko/hc/documentation) /[Learn DXPR Builder](/hc/documentation/learn-dxpr-builder) /[Extend](/hc/documentation/learn-dxpr-builder/extend) /[Architectuur en API’s](/hc/documentation/learn-dxpr-builder/extend/architecture) # API 참조.

 Learn DXPR BuilderExtendArchitectuur en API’s

   ## In this guide

DXPR Builder가 정의하는 PHP 서비스, JavaScript 확장 지점, 경로. 서비스 ID는 `dxpr_builder.services.yml`에서, 경로는 `dxpr_builder.routing.yml`에서 옵니다. 각 경로의 요청 및 응답 자세한 내용은 [API 엔드포인트](/hc/documentation/learn-dxpr-builder/reference/api-endpoints)를 보세요.

## PHP 서비스

| 서비스 ID | 클래스(`src/` 안) | 목적 |
|---|---|---|
| `dxpr_builder.service` | `Service\DxprBuilderService` | 출력용 빌더 콘텐츠 준비, 경로 토큰 처리, 아이콘 세트 레지스트리 구축. |
| `dxpr_builder.license_service` | `Service\DxprBuilderLicenseService` | 라이선스 상태, 과금 사용자, DXPR과의 편집기 동기화. |
| `dxpr_builder.key_service` | `Service\DxprBuilderKeyService` | 제품 키 읽기 및 저장. |
| `dxpr_builder.jwt_decoder` | `Service\DxprBuilderJWTDecoder` | 제품 키 페이로드 디코딩. |
| `dxpr_builder.user_settings` | `Service\UserSettings` | 각 편집자의 편집기 설정. 사용자 데이터에 보관. |
| `dxpr_builder.content_lock` | `Service\ContentLock` | 엔터티 리비전을 편집 중인 사용자 기록. |
| `dxpr_builder.content_migration` | `Service\ContentMigrationService` | 콘텐츠 마이그레이션 실행. 태그 서비스 수집: `dxpr_builder.content_migration` |
| `dxpr_builder.profile_handler` | `Service\Handler\ProfileHandler` | 프로필을 편집기 설정으로 변환. |
| `dxpr_builder.handler.block` | `Service\Handler\BlockHandler` | 요소로 배치된 Drupal 블록 렌더링. |
| `dxpr_builder.handler.view` | `Service\Handler\ViewHandler` | 요소로 배치된 Views 표시 렌더링. |
| `dxpr_builder.template_image_validator` | `Service\TemplateImageValidator` | 템플릿 미리 보기 이미지 검증. |
| `dxpr_builder.rl_variant.extractor`, `dxpr_builder.rl_variant.registrar` | `RlIntegration\Service\*` | A/B 테스트 변형. RL 모듈 없이는 비활성. |
| `dxpr_builder.rl_sort.extractor`, `dxpr_builder.rl_sort.registrar` | `RlIntegration\Service\*` | 스마트 정렬 실험. RL 모듈 없이는 비활성. |
| `logger.channel.dxpr_builder` | core logger channel | 로그 채널 `dxpr_builder` |

### DxprBuilderServiceInterface

다음이 구현: `dxpr_builder.service`. 가장 많이 호출할 메서드:

- `insertBaseTokens($content)`: 이 사이트의 기본 URL, 파일 디렉터리, 모듈 경로를 토큰으로 교체. 편집기는 콘텐츠를 이 형태로 저장.
- `replaceBaseTokens(&$content): void`: 토큰을 현재 환경의 URL로 다시 확장.
- `stripHtmlElementPersists(string $markup): string`. `data-az-persist`특성을 제거. 편집기 바깥에서 쓴 마크업에 실행. 편집기가 불러올 때 다시 만듦.
- `getCmsElementNames()`: 요소로 제공되는 블록과 Views 표시. 캐시됨.
- `getIconSets(): array`: YAML 검색과 `hook_dxpr_builder_icon_sets_alter()`후의 아이콘 세트 레지스트리.

```php
$markup = \Drupal::service('dxpr_builder.service')->insertBaseTokens($html);

```

### DxprBuilderLicenseServiceInterface

다음이 구현: `dxpr_builder.license_service`.

- `isBillableUser(?AccountInterface $account = NULL): bool`. 사용자 1과 `edit with dxpr builder`가 있고 DXPR Builder 편집에서 제외되지 않은 활성 계정에 TRUE.
- `getLicenseInfo()`: DXPR 라이선스 서버의 라이선스 상태. 캐시됨. 제품 키가 없으면 무료 등급 반환. 사용자 1명과 콘텐츠 100개.
- `syncAllUsersWithCentralStorage(string $operation, string $json_web_token = ''): void`: 이 사이트의 편집자를 DXPR에 전송. `$operation`(은)는 인터페이스 상수 `DXPR_USER_SYNC_OPERATION`(`sync`), `DXPR_USER_ADD_OPERATION`(`add`), `DXPR_USER_REMOVE_OPERATION`(`remove`) 중 하나.

### DxprBuilderKeyService

- `getApiKey(): ?string`: 제품 키. `api_key_storage`설정이 `key`이면 `key_provider`에 지정된 Key 엔터티를 읽고, 아니면 `json_web_token`(을)를 읽습니다.
- `setApiKey(string $key_value, string $storage_type = 'config', ?string $selected_key_id = NULL): void`: 키를 구성 또는 Key 엔터티에 저장.

### DxprBuilderJWTDecoder

- `decodeJwt(string $access_token)`: 제품 키의 `sub`, `scope`, `dxpr_tier` 클레임 반환. 토큰을 읽을 수 없으면 각각 NULL. 결과는 토큰별 캐시.

## JavaScript 확장 지점

편집기 스크립트는 `window.dxprBuilder`의 두 배열을 공유합니다. 배열을 만드는 스크립트와 실행 시 한 번 읽는 `dxpr_builder.js` 사이에 자신의 객체를 푸시하세요.

| 배열 | 생성 주체 | 처리: `dxpr_builder.js`가 이를 처리하는 방식 |
|---|---|---|
| `dxpr_param_types` | `dxpr_param_types.js` | 각 객체를 매개변수 유형으로 등록: `register_param_type()` |
| `dxpr_elements` | `dxpr_elements.js` | `create_dxpr_elements()`(은)는 각 정의를 `register_animated_element()`(으)로 등록하고 `params`(을)를 다음으로 변환: `make_param_type()` |

모듈이 등록하는 매개변수 유형은 다음과 같습니다: `boxmodel`, `checkbox`, `checkboxes`, `colorpicker`, `datetime`, `dropdown`, `dxb_slider`, `html`, `icon`, `image`, `images`, `link`, `links`, `numericfield`, `row_layout`, `saved_datetime`, `social_links`, `textarea`, `textfield`, `video`. 알 수 없는 `type`의 매개변수는 일반 텍스트 입력으로 렌더링됩니다.

[사용자 정의 요소](/ko/hc/documentation/learn-dxpr-builder/development/custom-elements)에 완전한 요소 정의와 적시에 불러오는 법이 나와 있습니다.

## 편집기 경로

접근 범례: **billable**(은)는 `_dxpr_builder_billable_user`검사(사용자 1 또는 `edit with dxpr builder`가 있고 제외되지 않은 활성 계정). **CSRF**(은)는 `_csrf_token`.

| 경로 | 경로 이름 | 메서드 | 접근 |
|---|---|---|---|
| `/dxpr_builder/ajax` | `dxpr_builder.ajax_callback` | 모두 | billable, CSRF |
| `/dxpr_builder/ajax/file_upload` | `dxpr_builder.ajax_file_upload_callback` | POST, DELETE | billable, CSRF |
| `/dxpr_builder/ajax/ai/chat` | `dxpr_builder.ai_chat` | POST | `edit with dxpr builder`, billable, CSRF |
| `/dxpr_builder/ajax/ai/image` | `dxpr_builder.ai_image` | POST | `edit with dxpr builder`, billable, CSRF |
| `/dxpr_builder/ajax/ai/image/edit` | `dxpr_builder.ai_image_edit` | POST | `edit with dxpr builder`, billable, CSRF |
| `/dxpr_builder/csrf` | `dxpr_builder.csrf_refresh` | 모두 | billable |
| `/dxpr_builder/ajax/help_link_validator` | `dxpr_builder.ajax_help_link_validator` | 모두 | billable |
| `/dxpr_builder/media-library` | `dxpr_builder.media_library` | 모두 | `view media` |
| `/dxpr_builder/entity-link-suggestions` | `dxpr_builder.entity_link_suggestions` | GET | `edit with dxpr builder`, CSRF |
| `/dxpr_builder/user-settings` | `dxpr_builder.user_settings` | POST | `edit with dxpr builder`, CSRF |

## 관리 경로

모든 관리 페이지는 다음 아래에 있습니다: **DXPR Studio &gt; DXPR Builder**. 탭 열에는 관리 메뉴의 레이블이 표시됩니다.

| 경로 | 탭 | 권한 |
|---|---|---|
| `/admin/dxpr_studio` | DXPR Studio | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder` | DXPR Builder | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/settings` | General Settings | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/ai_settings` | AI | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/content` | Content Items | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/migration-status` | Migrations (under Content Items) | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/page_template` | Page Templates | `administer site configuration` |
| `/admin/dxpr_studio/dxpr_builder/user_licenses` | User Licenses | `administer dxpr builder configuration` |
| `/admin/dxpr_studio/dxpr_builder/profile` | User Profiles | `administer dxpr_builder_profile` |
| `/admin/dxpr_studio/dxpr_builder/user_templates` | User Templates | `administer site configuration` |