RelatedContent API

개요

RelatedContent API는 Fess 의 관련 콘텐츠를 관리하기 위한 API입니다. 특정 키워드에 관련된 콘텐츠를 커스텀 표시할 수 있습니다.

기본 URL

/api/admin/relatedcontent

엔드포인트 목록

메서드 경로 설명
GET /settings 관련 콘텐츠 목록 조회
GET /setting/{id} 관련 콘텐츠 조회
POST /setting 관련 콘텐츠 만들기
PUT /setting 관련 콘텐츠 업데이트
DELETE /setting/{id} 관련 콘텐츠 삭제

관련 콘텐츠 목록 조회

요청

GET /api/admin/relatedcontent/settings

파라미터

파라미터 타입 필수 설명
size Integer 아니오 페이지당 건수 (기본값: 25. fess_config.propertiespaging.page.size 로 변경 가능)
page Integer 아니오 페이지 번호 (1부터 시작. 기본값: 1. 0 이하를 지정한 경우 1로 처리됩니다)
term String 아니오 검색 키워드로 필터링 (와일드카드 검색)
content String 아니오 콘텐츠 본문으로 필터링 (와일드카드 검색)

응답

{
  "response": {
    "version": "15.7.0",
    "status": 0,
    "settings": [
      {
        "id": "content_id_1",
        "term": "fess",
        "content": "<div>Fess is an open source search server.</div>",
        "virtualHost": "",
        "sortOrder": 0,
        "createdBy": "admin",
        "createdTime": 1700000000000,
        "updatedBy": "admin",
        "updatedTime": 1700000000000,
        "versionNo": 1
      }
    ],
    "total": 5
  }
}

참고

settings 의 각 요소 및 단일 조회 엔드포인트가 반환하는 setting 객체에는 저장된 엔티티의 필드가 그대로 포함됩니다. term, content, sortOrder, virtualHost 외에도 감사 필드인 createdBy, createdTime, updatedBy, updatedTime 과 낙관적 잠금 필드인 versionNo 도 반환됩니다. createdTimeupdatedTime 은 에포크 기준 밀리초(숫자)로 표현됩니다. 값이 설정되지 않은 (null) 필드는 응답에서 생략됩니다. 또한 모든 응답의 response 객체에는 제품 버전을 나타내는 version 이 항상 포함됩니다 (자세한 내용은 Admin API 개요 를 참조하십시오).

관련 콘텐츠 조회

요청

GET /api/admin/relatedcontent/setting/{id}

응답

{
  "response": {
    "version": "15.7.0",
    "status": 0,
    "setting": {
      "id": "content_id_1",
      "term": "fess",
      "content": "<div>Fess is an open source search server.</div>",
      "virtualHost": "",
      "sortOrder": 0,
      "createdBy": "admin",
      "createdTime": 1700000000000,
      "updatedBy": "admin",
      "updatedTime": 1700000000000,
      "versionNo": 1
    }
  }
}

참고

업데이트(PUT) 시 필요한 versionNo 는 이 조회 응답에 포함된 값을 지정합니다.

관련 콘텐츠 만들기

요청

POST /api/admin/relatedcontent/setting
Content-Type: application/json

요청 본문

{
  "term": "search",
  "content": "<div class='related'><h3>About Search</h3><p>Learn more about search features...</p></div>",
  "sortOrder": 0,
  "virtualHost": ""
}

필드 설명

필드 필수 설명
term 검색 키워드 (최대 10000자)
content 표시할 HTML 콘텐츠 (최대 10000자)
sortOrder 아니오 표시 순서 (0 이상 2147483647 이하의 정수)
virtualHost 아니오 가상 호스트 (최대 1000자)

응답

{
  "response": {
    "version": "15.7.0",
    "status": 0,
    "id": "new_content_id",
    "created": true
  }
}

관련 콘텐츠 업데이트

요청

PUT /api/admin/relatedcontent/setting
Content-Type: application/json

요청 본문

{
  "id": "existing_content_id",
  "term": "search",
  "content": "<div class='related updated'><h3>About Search</h3><p>Updated information...</p></div>",
  "sortOrder": 0,
  "virtualHost": "",
  "versionNo": 1
}

필드 설명

필드 필수 설명
id 업데이트할 관련 콘텐츠의 ID (최대 1000자)
term 검색 키워드 (최대 10000자)
content 표시할 HTML 콘텐츠 (최대 10000자)
sortOrder 아니오 표시 순서 (0 이상 2147483647 이하의 정수)
virtualHost 아니오 가상 호스트 (최대 1000자)
versionNo 낙관적 잠금용 버전 번호. setting/{id} 의 조회 응답에 포함된 값을 지정합니다.

응답

{
  "response": {
    "version": "15.7.0",
    "status": 0,
    "id": "existing_content_id",
    "created": false
  }
}

참고

createdBy, createdTime, updatedBy, updatedTime 등의 감사 필드나 crudMode 를 요청 본문에 포함해도 서버 측에서 자동으로 설정되므로 무시됩니다. 만들기 또는 업데이트 시 지정할 필요는 없습니다.

관련 콘텐츠 삭제

요청

DELETE /api/admin/relatedcontent/setting/{id}

응답

{
  "response": {
    "version": "15.7.0",
    "status": 0
  }
}

사용 예

제품 정보 관련 콘텐츠

curl -X POST "http://localhost:8080/api/admin/relatedcontent/setting" \
     -H "Authorization: Bearer YOUR_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{
       "term": "product",
       "content": "<div class=\"product-info\"><h3>Our Products</h3><ul><li>Product A</li><li>Product B</li></ul></div>",
       "sortOrder": 0
     }'

지원 정보 관련 콘텐츠

curl -X POST "http://localhost:8080/api/admin/relatedcontent/setting" \
     -H "Authorization: Bearer YOUR_TOKEN" \
     -H "Content-Type: application/json" \
     -d '{
       "term": "support",
       "content": "<div><p>Need help? Contact: support@example.com</p></div>",
       "sortOrder": 0
     }'

참고 정보