SWORD API
目的・用途
クライアントからSWORDv3プロトコルに従いリポジトリ上のアイテム操作を実現する。
利用方法
APIの認証にはOAuth2を利用する。
アクセストークンの発行はAPI-1:OAuth2を参照。
Scope:
deposit: write
エンドポイント:
項番 |
HTTP request |
内容 |
---|---|---|
1 |
GET /sword/service-document |
リポジトリのサービスドキュメントを取得する。 |
2 |
POST /sword/service-document |
WEKO3の一括登録フォーマットを用いて、アイテムを登録する。 |
3 |
GET /sword/deposit/<recid> |
recidを指定してリポジトリ上に存在するアイテムのステータスドキュメントを取得する。 |
4 |
DELETE /sword/deposit/<recid> |
recidを指定してアイテムを削除する。 |
CURLでのリクエスト実行例:
各APIのリクエスト仕様の詳細は後述。
GET /sword/service-document
curl https://192.168.56.103/sword/service-document -H "Authorization:Bearer Dp85qdLJefoKZ9AuUeIVCqL0Zj9lHxulU1ZSqWGZKI0xJUfxA4wKFnWgztEo" |
-H オプション
Authorization は "Bearer" + " (半角スペース)" + "認証キー"の形式で指定する
POST /sword/service-document**
curl -s -k https://weko3.ir.rcos.nii.ac.jp/sword/service-document -F
"file=@import.zip;type=application/zip" -H "Authorization:Bearer 50is1B9XcyHcyRckWx9z0V
2XZnpHq7" -H "Content-Disposition:attachment; filename=import.zip" -H "Packaging:http://
purl.org/net/sword/3.0/package/SimpleZip"| jq .
{
"@context": "https://swordapp.github.io/swordv3/swordv3.jsonld",
"@id": "https://weko3.ir.rcos.nii.ac.jp/sword/deposit/96568",
"@type": "Status",
"actions": {
"appendFiles": false,
"appendMetadata": false,
"deleteFiles": false,
"deleteMetadata": false,
"deleteObject": true,
"getFiles": false,
"getMetadata": false,
"replaceFiles": false,
"replaceMetadata": false
},
"eTag": "5",
"fileSet": {},
"links": [
{
"@id": "https://weko3.ir.rcos.nii.ac.jp/records/96568",
"contentType": "text/html",
"rel": [
"alternate"
]
},
{
"@id": "http://hdl.handle.net/20.500.12465/0000096568",
"contentType": "text/html",
"rel": [
"alternate"
]
}
],
"metadata": {},
"service": "/sword/service-document",
"state": [
{
"@id": "http://purl.org/net/sword/3.0/state/ingested",
"description": ""
}
]
}
|
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | curl https://192.168.56.103/sword/service-document -F "file=@export-all3.zip;type=application/zip" -H "Authorization:Bearer Dp85qdLJefoKZ9AuUeIVCqL0Zj9lHxulU1ZSqWGZKI0xJUfxA4wKFnWgztEo" -H "Content-Disposition:attachment; filename=export-all3.zip" -H "Packaging:http://purl.org/net/sword/3.0/package/SimpleZip" |
-F オプション
multipart/form-data 形式で POSTするファイルを指定する
boundaryやContent-Lengthは自動で付加されるため自前で指定しなくてもよい
ファイル名の先頭には@を付加すること
ファイルのContent-Typeを"application/zip"とするため、ここでtypeを指定する(指定しないと application/octet-stream となってしまう)
-H オプション
Authorization は "Bearer" + " (半角スペース)" + "認証キー"の形式で指定する
Content-Disposition の filename は -Fオプションで指定したファイルのファイル名と一致させる
Packaging は "http://purl.org/net/sword/3.0/package/SimpleZip" を指定
必須の Content-Length および Content-Type については前述の通り、-Fオプションにて自動付加されるため-Hオプションでの指定は不要
3. GET /sword/deposit/\
curl https://192.168.56.103/sword/deposit/1 -H "Authorization:Bearer Dp85qdLJefoKZ9AuUeIVCqL0Zj9lHxulU1ZSqWGZKI0xJUfxA4wKFnWgztEo" |
-H オプション
- Authorization は "Bearer" + " (半角スペース)" + "認証キー"の形式で指定する
4. DELETE /sword/deposit/\
curl -X DELETE https://192.168.56.103/sword/deposit/1 -H "Authorization:Bearer Dp85qdLJefoKZ9AuUeIVCqL0Zj9lHxulU1ZSqWGZKI0xJUfxA4wKFnWgztEo" |
-H オプション
- Authorization は "Bearer" + " (半角スペース)" + "認証キー"の形式で指定する
- 利用可能なロール
ロール | システム 管理者 |
リポジトリ 管理者 |
コミュニティ 管理者 |
登録ユーザー | 一般ユーザー | ゲスト (未ログイン) |
---|---|---|---|---|---|---|
利用可否 | ○ | ○ | ○ | ○ | ○ | × |
- 機能内容
各APIへのリクエストに応じて処理を実行しレスポンスを返す
- OAuthアクセストークンによるユーザー認証を必須とする
アイテム登録機能で登録に使用するZIPファイルはインポートで使用するものと同様の形式のみ使用できる。
- ZIPファイル形式の詳細は ADMIN-2-4:インポート を参照
API仕様
サービスドキュメント取得機能:GET /sword/service-document
エンドポイント | GET /sword/service-document | |||
---|---|---|---|---|
概要 | リポジトリのサービスドキュメントを取得する。 | |||
リクエスト | ヘッダー | |||
ヘッダー | 必須 | 説明 | 例 | |
Authorization | ○ | 操作するWEKOユーザーのOAuth認証情報。 “Bearer”+” (半角スペース)”+“認証キー”の形式で指定する。 |
“Bearer xxxxxxx” | |
On-Behalf-Of | - | 代理投稿ユーザーのメールアドレスを指定する。 | user@example.com | |
レスポンス | コード | ドキュメント | 説明 | |
200 | サービスドキュメント | サーバーのサービスドキュメントを返す。 | ||
400 | エラードキュメント | リクエスト内容に何らかの不備がある場合。 | ||
401 | リクエストでAuthorization ヘッダーが提供されない場合。 | |||
403 | 認証に失敗した場合。 | |||
412 | サーバー側がOn-Behalf-Of をサポートしていないにもかかわらず、リクエストでOn-Behalf-Of ヘッダーが提供された場合。 | |||
500 | サーバー内部エラーが発生した場合。 |
アイテム登録機能:POST /sword/service-document
エンドポイント | POST /sword/service-document | |||
---|---|---|---|---|
概要 | 一括登録用のZIPファイルを用いてアイテムを新規登録する。 | |||
リクエスト | ヘッダー | |||
ヘッダー | 必須 | 説明 | 例 | |
Authorization | ○ | 操作するWEKOユーザーのOAuth認証情報。 “Bearer”+” (半角スペース)”+“認証キー”の形式で指定する。 |
“Bearer xxxxxxx” | |
On-Behalf-Of | - | 代理投稿ユーザーのメールアドレスを指定する。 | “user@example.com” | |
Content-Disposition | ○ | リクエストボディに付加したファイルのファイル名を指定する。 | “attachment; filename=example.zip” | |
Content-Length | ○ | リクエストボディに付加したファイルサイズを指定する。 | 1024000 | |
Content-Type | ○ | リクエストボディにファイルを付加するため multipart/form-data を指定する。 | multipart/form-data; boundary=xxxxxxxx | |
Packaging | ○ | パッケージフォーマットと指定する。 SWORDでは以下の3つのパッケージフォーマットが定義されている。 http://purl.org/net/sword/3.0/package/Binary http://purl.org/net/sword/3.0/package/SimpleZip http://purl.org/net/sword/3.0/package/SWORDBagIt ※現在はSimpleZip形式のみ対応 |
“http://purl.org/net/sword /3.0/package/SimpleZip” |
|
ボディ | ||||
Key | 必須 | 説明 | ||
file | ○ | form-data 形式でボディにZIPファイルを付加する。 ファイルのContent-Type には“application/zip”を指定すること。 |
||
レスポンス | コード | ドキュメント | 説明 | |
200 | ステータスドキュメント | 登録されたアイテムのステータスドキュメントを返す。 | ||
400 | エラードキュメント | リクエスト内容に何らかの不備がある場合。 | ||
401 | リクエストでAuthorization ヘッダーが提供されない場合。 | |||
403 | 認証に失敗した場合。 認証したOAuthトークンが「deposit:write」スコープを持っていない場合。 |
|||
412 | サーバー側がOn-Behalf-Of をサポートしていないにもかかわらず、リクエストでOn-Behalf-Of ヘッダーが提供された場合。 | |||
413 | 送信されたファイルのサイズがサーバーに設定されたmaxUploadSizeを超えている場合。 | |||
415 | ヘッダーまたはボディに付加されたファイルのContent-Typeがサーバー側でサポートされていない場合。 | |||
500 | サーバー内部エラーが発生した場合。 |
アイテム状態取得機能:GET /sword/deposit/\
エンドポイント | GET /sword/deposit/<recid> | |||
---|---|---|---|---|
概要 | 指定したアイテムのステータスドキュメントを取得する。 | |||
リクエスト | ヘッダー | |||
ヘッダー | 必須 | 説明 | 例 | |
Authorization | ○ | 操作するWEKOユーザーのOAuth認証情報。 “Bearer”+” (半角スペース)”+“認証キー”の形式で指定する。 |
“Bearer xxxxxxx” | |
On-Behalf-Of | - | 代理投稿ユーザーのメールアドレスを指定する。 | “user@example.com” | |
パスパラメータ | ||||
Key | 必須 | 説明 | ||
<recid> | ○ | レコードID | ||
レスポンス | コード | ドキュメント | 説明 | |
200 | ステータスドキュメント | 指定されたアイテムのステータスドキュメントを返す。 | ||
400 | エラードキュメント | リクエスト内容に何らかの不備がある場合。 | ||
401 | リクエストでAuthorization ヘッダーが提供されない場合。 | |||
403 | 認証に失敗した場合。 | |||
404 | 指定したrecidに該当するアイテムが存在しない(削除されている)場合。 | |||
412 | サーバー側がOn-Behalf-Of をサポートしていないにもかかわらず、リクエストでOn-Behalf-Of ヘッダーが提供された場合。 | |||
500 | サーバー内部エラーが発生した場合。 |
アイテム削除機能:DELETE /sword/deposit/\
エンドポイント | DELETE /sword/deposit/<recid> | |||
---|---|---|---|---|
概要 | 指定したアイテムを削除する。 | |||
リクエスト | ヘッダー | |||
ヘッダー | 必須 | 説明 | 例 | |
Authorization | ○ | 操作するWEKOユーザーのOAuth認証情報。 “Bearer”+” (半角スペース)”+“認証キー”の形式で指定する。 |
“Bearer xxxxxxx” | |
On-Behalf-Of | - | 代理投稿ユーザーのメールアドレスを指定する。 | “user@example.com” | |
パスパラメータ | ||||
Key | 必須 | 説明 | ||
<recid> | ○ | レコードID | ||
レスポンス | コード | ドキュメント | 説明 | |
204 | なし | 空のレスポンスを返す。 | ||
400 | エラードキュメント | リクエスト内容に何らかの不備がある場合。 | ||
401 | リクエストでAuthorization ヘッダーが提供されない場合。 | |||
403 | 認証に失敗した場合。 | |||
412 | サーバー側がOn-Behalf-Of をサポートしていないにもかかわらず、リクエストでOn-Behalf-Of ヘッダーが提供された場合。 | |||
500 | サーバー内部エラーが発生した場合。 |
ドキュメント仕様
サービスドキュメント
サーバー全体の機能と操作パラメータを定義したドキュメント
項目 | 型 | 説明 |
---|---|---|
@context | string | “https://swordapp.github.io/swordv3/swordv3.jsonld”を固定で出力。 |
@id | string | "[WEKO3のURL]/sword/service-document"を出力。 |
@type | string | "ServiceDocument"を固定で出力。 |
accept | array | サーバーに受け入れられるコンテンツタイプのリスト。 ”*/*”を出力する。 |
acceptArchiveFormat | array | サーバーが解凍できるアーカイブ形式のリスト。 現状"application/zip"のみ対応。 |
acceptDeposits | boolean | サーバーがデポジットを受け入れるか否か。 |
acceptMetadata | array | サーバーで受け入れ可能なメタデータ形式のリスト。 現状では出力内容にかかわらず、Metadataの受け入れには対応していない。 |
acceptPackaging | array | サーバーで受け入れ可能なパッケージ形式のリスト。 現状すべての形式を受け入れるが、アイテム登録はWEKOの一括登録用ZIP形式でのみ可能。 |
authentication | Array | サーバーでサポートされている認証スキームのリスト。 現状”OAuth”のみ対応。 |
byReferenceDeposit | boolean | サーバーがbyReferenceDepositをサポートしているか否か。現状未対応のためFalseを出力。 |
collectionPolicy | object | コレクションポリシーを示すオブジェクト。 |
collectionPolicy.@id | string | コレクションポリシーのURL。 |
collectionPolicy.description | string | コレクションポリシーの説明。 |
dc:title | string | リポジトリの名称を出力。 |
dcterms:abstract | string | リポジトリの説明。 |
digest | array | サーバーが受け入れるdigest形式のリスト。 現状digestの検証は未対応。 |
maxAssembledSize | integer | Segmented File Upload時のファイル合計最大サイズ(単位:byte)。 |
maxByReferenceSize | integer | By-Reference Deposit時のファイル最大サイズ(単位:byte)。 |
maxSegmentSize | integer | Segmented File Upload時の1ファイルの最大サイズ(単位:byte)。 |
maxSegments | integer | Segmented File Upload時のセグメントの最大数。 |
maxUploadSize | integer | アップロードされるファイルの最大サイズ(単位:byte)。 |
minSegmentSize | integer | Segmented File Upload時の1ファイルの最小サイズ(単位:byte)。 |
onBehalfOf | boolean | 代理投稿をサポートしているか否か。 現状未対応のためfalseを出力。 |
root | string | サービスドキュメントのルートURL。 |
services | array | 親サービスに含まれるサービスのリスト。 現状未対応。 |
staging | string | Segmented File Upload時にコンテンツをステージング先URL。現状未対応のため空文字を出力。 |
stagingMaxIdle | integer | ステージングされたファイルの最小保持時間。 |
treatment | object | デポジット時に期待される処理のURLと説明を示すオブジェクト。 |
treatment.@id | string | 処理のURL。 |
treatment.description | string | 処理の説明。 |
version | string | サポートしているSWORDバージョン。 "http://purl.org/net/sword/3.0"を出力。 |
ステータスドキュメント
アイテムの内容と現在の状態に関する詳細情報を示すドキュメント
項目 | 型 | 説明 |
---|---|---|
@context | string | “https://swordapp.github.io/swordv3/swordv3.jsonld”を固定で出力。 |
@id | string | "[WEKO3のURL]/sword/deposit/[アイテムのrecid]"を出力。 |
@type | string | "ServiceDocument"を固定で出力。 |
actions | object | アイテムに対してSWORDで使用可能なアクション。 現時点では deleteObject のみTrueを返し、それ以外はFalseを返すようになっている。 |
actions. appendFiles | boolean | ファイル追加要求が発行可能か否か。 |
actions.appendMetadata | boolean | メタデータ追加要求が発行可能か否か。 |
actions. deleteFiles | boolean | ファイル削除要求が発行可能か否か。 |
actions. deleteMetadata | boolean | メタデータ削除要求が発行可能か否か。 |
actions. deleteObject | boolean | アイテム削除要求が発行可能か否か。 |
actions. getFiles | boolean | ファイル取得要求が発行可能か否か。 |
actions. getMetadata | boolean | メタデータ取得要求が発行可能か否か。 |
actions. replaceFiles | boolean | ファイル置き換え要求が発行可能か否か。 |
actions. replaceMetadata | boolean | メタデータ置き換え要求が発行可能か否か。 |
eTag | string | アイテムのeTag。 WEKOではアイテムのリビジョン番号を返す。 |
fileSet | object | ファイルセットを示すオブジェクト。 現時点では空オブジェクトを返す。 |
fileSet.@id | string | ファイルセットのURL。 |
fileSet.eTag | string | ファイルセットのeTag。 |
links | array | アイテムのリンクを示すオブジェクト。 現時点ではアイテム詳細ページのURLを出力する。またDOIやCNRIハンドルを持つ場合も同様に出力する。 |
links[].@id | string | リソースのURL。 |
links[].byReference | string | byReference deposit の際の参照元URL。 |
links[].contentType | string | リソースのコンテンツタイプ。 |
links[].dcterms:isReplacedBy | string | 同じオブジェクト内のファイルの新しいバージョンへのURL。 |
links[].dcterms:relation | string | 非SWORDアクセスポイントへのURL。 |
links[].dcterms:replaces | string | 同じオブジェクト内の古いバージョンのファイルへのURL。 |
links[].depositedBy | string | アイテム登録を行ったユーザーの識別子。 |
links[].depositedOn | string | アイテム登録日時のタイムスタンプ。 |
links[].depositedOnBehalfOf | string | 代理投稿により登録を行ったユーザーの識別子。 |
links[].derivedFrom | string | 現在のリソースが派生したリソースのURLへの参照。 |
links[].eTag | string | リソースのeTag。 |
links[].log | string | クライアントが知っておくべきデポジットに関連する情報。 |
links[].packaging | string | リソースがパッケージである場合、パッケージ形式の識別子を示す。 |
links[].rel | string | リソースとオブジェクトの関係。
|
links[].status | string | 取り込みに関するリソースのステータス。 |
links[].versionReplacedOn | string | 現在のリソースが新しいリソースに置き換えられた日付。 |
metadata | object | メタデータを示すオブジェクト。 現時点では空オブジェクトを返す。 |
metadata.@id | string | メタデータのURL。 |
metadata.eTag | string | メタデータのeTag。 |
service | string | サービスドキュメントのURL。 |
state | array | アイテムがサーバー上にある状態のリスト。 |
state[].@id | string | 状態の識別子。 現状では"http://purl.org/net/sword/3.0/state/ingested"を固定で出力。 |
state[].description | string | 状態の説明 |
エラードキュメント
エラー内容を表すドキュメント
項目 | 型 | 説明 |
---|---|---|
@context | string | “https://swordapp.github.io/swordv3/swordv3.jsonld”を固定で出力。 |
@type | string | エラータイプを示す文字列。 4.3.3エラータイプ を参照。 |
error | string | エラー内容の説明。 |
log | string | より詳細なエラー内容。 現在は出力していない。 |
timestamp | string | エラー発生時のタイムスタンプ。 |
エラータイプ
エラータイプ文字列 | エラーコード | エラー原因等 |
---|---|---|
AuthenticationFailed | 403 | 認証に失敗。 |
AuthenticationRequired | 401 | 認証情報が不足。 |
BadRequest | 400 | リクエストに何らかの不備がある。 |
ByReferenceFileSizeExceeded | 400 | サーバーの制限を超えるファイルをデポジットしようとした。 |
ByReferenceNotAllowed | 412 | サーバーが By-Reference deposit をサポートしていない。 |
ContentMalformed | 400 | リクエスト本文の内容に不正がある。 |
ContentTypeNotAcceptable | 415 | サーバーで許可されていないコンテンツタイプをリクエストした。 |
DigestMismatch | 412 | リクエストヘッダーによって提供されたdigestがサーバーで受け取ったコンテンツと一致していない。 |
ETagNotMatched | 412 | リクエストヘッダーによって提供されたIf-Matchの値が更新対象コンテンツのeTagと一致していない。 |
ETagRequired | 412 | リクエストヘッダーにIf-Matchの値が指定されていない。 |
Forbidden | 403 | サーバーによって許可されていない操作をリクエストした。 |
FormatHeaderMismatch | 415 | サーバーがサポートしていない形式のコンテンツがリクエストされた。 |
InvalidSegmentSize | 400 | セグメントアップロード時のファイルサイズが範囲外。 |
MaxAssembledSizeExceeded | 400 | セグメントアップロード時の合計ファイルサイズが最大値を超えている。 |
MaxUploadSizeExceeded | 413 | アップロードされたコンテンツサイズが最大値を超えている |
MetadataFormatNotAcceptable | 415 | サーバーがサポートしていない形式のMetadata-Formatがリクエストされた。 |
MethodNotAllowed | 405 | メソッドへのアクセスが許可されていない。 |
OnBehalfOfNotAllowed | 412 | サーバーが On-Behalf-Of をサポートしていない。 |
PackagingFormatNotAcceptable | 415 | サーバーがサポートしていない形式のPackagingフォーマットがリクエストされた。 |
SegmentedUploadTimedOut | 410 | セグメントアップロード先のURLにアクセスできない。 |
SegmentLimitExceeded | 400 | セグメント数が最大値を超えている。 |
UnexpectedSegment | 400 | サーバーが予期していないセグメントを受信した。 |
- 関連モジュール
invenio_oauth2server:OAuthトークンによるユーザー認証を行う
invenio_deposit:OAuthトークンが参照するデポジット操作スコープを定義している
weko_records_ui:レコード情報の取得、アイテムの削除を実行する
weko_search_ui:インポート処理を実行する
- 処理概要
サービスドキュメント取得機能:GET /sword/service-document
リクエストをチェックする
Authorizationヘッダーに記載されたOAuth認証情報を使用しWEKOにログインする
On-Behalf-Ofヘッダーが存在する場合、サーバー設定を確認する
サーバー設定値を参照し、サービスドキュメントを生成する
サービスドキュメントを返却する
アイテム登録機能:POST /sword/service-document
リクエストをチェックする
Authorizationヘッダーに記載されたOAuth認証情報を使用しWEKOにログインする
認証に使用されたOAuthトークンのScopeを確認する
On-Behalf-Ofヘッダーが存在する場合、サーバー設定を確認する
送付されたファイルの有無を確認する
ファイルサイズを確認する
Content-Typeを確認する
Packagingを確認する
ファイル内容に不備が無いかのチェックを行う
ファイル内のアイテムが新規登録か否かを確認する
インポート処理を行う
登録したアイテムのステータスドキュメントを生成する
インポート処理から返されたrecidからアイテム情報を取得する
取得したアイテム情報からステータスドキュメントを生成する
ステータスドキュメントを返却する
アイテム状態取得機能:GET /sword/deposit/\
リクエストをチェックする
Authorizationヘッダーに記載されたOAuth認証情報を使用しWEKOにログインする
On-Behalf-Ofヘッダーが存在する場合、サーバー設定を確認する
指定されたrecidからアイテム情報を取得する
取得したアイテム情報からステータスドキュメントを生成する
ステータスドキュメントを返却する
アイテム削除機能:DELETE /sword/deposit/\
リクエストをチェックする
Authorizationヘッダーに記載されたOAuth認証情報を使用しWEKOにログインする
On-Behalf-Ofヘッダーが存在する場合、サーバー設定を確認する
指定されたrecidを引数にsoft_delete処理を実行する
空のレスポンスを返却する
更新履歴
日付 | GitHubコミットID | 更新内容 |
---|---|---|
2022/06/13 |
e6db31c99d459605f5bc09f15c4abd07ea573428 | 初版作成 |
2023/08/31 |
353ba1deb094af5056a58bb40f07596b8e95a562 | ADMIN-2-4へのリンクを追加 |