WebAPI(サーバースクリプト)
サーバーサイドのスクリプトは、GSP(Groovy Server Pages) または .groovy エンドポイントとして実行されます。スクリプトには WebAPI をはじめとする多数のグローバルが渡され、HTTP とコンテンツ(JCR)を扱えます。
実行モデル
スクリプトは JCR コンテンツとして保存され、次の URL で実行されます。
/bin/cms.cgi/<workspace>/content/<path>/<script.groovy|.gsp>
例: GET /bin/cms.cgi/web/content/commerce/endpoints/health.groovy?days=7
スクリプトのグローバル(主なもの)
| 名前 | 型 | 用途 |
|---|---|---|
out |
Writer |
レスポンス本文への出力 |
request / response |
HttpServletRequest / HttpServletResponse |
HTTP の入出力 |
session / application |
HttpSession / ServletContext |
セッション・アプリ共有 |
repositorySession |
Session(script resource API) |
JCR コンテンツの読み書きの主役 |
resource |
Resource |
処理中の JCR リソース |
WebAPI |
WebAPI |
include / fetch / パラメーター / エンコード(request がある場合のみ) |
log(LoggerAPI) |
LoggerAPI |
ログ出力(debug/info/warn/error) |
JSON / YAML |
— | JSON / YAML の解析・直列化 |
XPath / MetadataAPI |
— | クエリ・メタデータ |
ProcessAPI / IntegrationAPI |
— | BPM / EIP 連携 |
EventAdminAPI / cluster / CryptoAPI / MimeTypeAPI / SessionAPI |
— | イベント・クラスター・暗号・MIME・セッション生成 |
(request / response / out は HTTP 経由で実行されたときのみ利用可能です)
WebAPI のメソッド
| メソッド | 用途 |
|---|---|
include(path) |
別リソース(GSP 等)を取り込む(/ 始まりはワークスペース基準) |
forward(path) |
別リソースへフォワード |
importContent(path[, encoding]) |
ファイル / HTTP の内容を出力(jcr://・相対/絶対パス・HTTP URL) |
getParameter(name) |
リクエストパラメーター(単一値またはアップロードファイル) |
fetch(uri) |
HTTP GET(接続 3 秒・要求 10 秒のタイムアウト)。WebResource を返す |
encodeURIComponent / encodeURI / decodeURIComponent |
URI エンコード/デコード |
Session(script resource API)
repositorySession から、コンテンツを操作します。
getResource(absPath)/getResourceByIdentifier(id)/getRootFolder()— リソース取得commit()/rollback()— 保存 / 破棄deploy()—etc/jcr/deployとetc/jcr/provisioningを反映adaptTo(javax.jcr.Session)— 低レベル JCR セッションへ適応impersonate(userId)/newSession()— 別ユーザー / 新規セッションisAdmin()/isAnonymous()/isService()/getUserID()— 実行主体の判定
Resource の主な操作
- 読み取り:
getContent()/getContentAsStream()/getProperty(name)/list() - 書き込み:
write(content)/setProperty(name, value)/createFile()/createFolder()/getOrCreateFile(name) - 移動など:
moveTo(path)/copyTo(path)/remove() - バージョン:
addVersionControl()/checkout()/checkin()/checkpoint() - ロック:
lock()/unlock()/isLocked() - ACL:
getAccessControlList()/setAccessControlList(acl)/canRead()/canWrite()
例
GSP のインクルード:
<% WebAPI.include("/content/public/inc/head_start.gsp") %>
JSON エンドポイント(.groovy):
int days = (request.getParameter("days") ?: "7") as int
try {
def snapshot = Health.snapshot(repositorySession, days)
response.setStatus(200)
response.setHeader("Content-Type", "application/json")
response.getWriter().write(new ObjectMapper().writeValueAsString(snapshot))
} catch (Exception e) {
log.error("health endpoint error: \${e.message}", e)
response.setStatus(500)
}
コンテンツの作成と保存:
def res = repositorySession.getRootFolder().getOrCreateFile("content/notes/hello.json")
res.write('{"hello":"world"}')
res.setProperty("jcr:mimeType", "application/json")
repositorySession.commit()
認可・サービスアカウントの考え方は「ユーザー・ロール・権限」を参照してください。