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ファイルはインポートで使用するものと同様の形式のみ使用できる。

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

リソースとオブジェクトの関係。
以下の何れかの文字列を持つ。

  • alternate

  • packaging

  • depositedOn

  • depositedOnBehalfOf

  • status

  • log

  • dcterms:relation

  • dcterms:replaces

  • dcterms:isReplacedBy

  • versionReplaced

  • eTag

  • byReference

  • derivedFrom

  • metadataFormat

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へのリンクを追加

results matching ""

    No results matching ""