API リファレンス
I. API 仕様
1. 共通リクエストヘッダー
リクエストヘッダー | 説明 |
x-datahub-client-version | API のバージョン番号。 |
x-datahub-security-token | セキュリティトークン(存在する場合)。 |
Date | リクエストが送信された時刻。標準 GMT 形式(EEE, dd MMM yyyy HH:mm:ss z)である必要があります。 |
Authorization | リクエストの署名文字列。 |
Content-Type | リクエストのデータシリアル化タイプ。 |
2. 共通レスポンスヘッダー
レスポンスヘッダー | 説明 |
Content-Type | 返されたメッセージのデータシリアル化タイプ。 |
Content-Length | メッセージ本文のサイズ。 |
x-datahub-request-id | リクエストのグローバル一意識別子(GUID)。 |
3. エラーコード
エラーコード | 説明 | 備考 |
InvalidParameter | 1 つ以上のパラメーターが無効なため、エラーコードが返されます。 | |
InvalidCursor | カーソルが無効なため、エラーコードが返されます。 | |
NoSuchXXX | リクエストされたリソースが存在しないため、エラーコードが返されます。 | |
XXXAlreadyExist | リクエストされたリソースが既に存在するため、エラーコードが返されます。 | |
Unauthorized | 認証に失敗したため、エラーコードが返されます。 | AccessKey ペアが無効であるか、リクエストのタイムスタンプがサーバーに記録されているタイムスタンプと一致しません。 |
NoPermission | 操作を実行する権限がないため、エラーコードが返されます。 | リクエストの開始に使用する Resource Access Management (RAM)ユーザーに関連する権限がありません。 |
OperationDenied | 指定された操作が禁止されているため、エラーコードが返されます。 | 指定された操作は禁止されています。たとえば、1 つ以上のトピックを含むプロジェクトを削除することはできません。 |
LimitExceeded | トラフィックが 1 つ以上の定義済み制限を超えているため、エラーコードが返されます。 | 1 秒あたりのクエリ数(QPS)やトラフィック制限など、サーバーの制限を超えています。 |
InvalidShardOperation | シャードの分割またはマージ時にエラーが発生したため、エラーコードが返されます。 | |
MalformedRecord | リクエストされたデータの形式が無効なため、エラーコードが返されます。 | |
OffsetReseted | コンシューマーオフセットがリセットされたため、エラーコードが返されます。 | |
OffsetSessionChanged | サブスクリプション ID が別のユーザーによって使用されているため、エラーコードが返されます。 | |
SubscriptionOffline | サブスクリプションがキャンセルされたため、エラーコードが返されます。 | |
InternalServerError | 内部エラーが発生したため、エラーコードが返されます。 | |
その他のエラーコード | その他の再試行不可のエラーコード。今後削除される可能性があります。 |
4. 統一エラーレスポンス形式
パラメーター | 説明 |
ErrorCode | 返されるエラーコード。 |
ErrorMessage | 返されるエラーメッセージ。 |
エラーレスポンスの例:
HTTP/1.1 403
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: application/json
Content-Length: xxx
{
"ErrorCode": "Unauthorized",
"ErrorMessage": "Authroize failed" // 認証に失敗しました
}
5. 制限
パラメーター | 説明 |
ProjectName | プロジェクト名は 3 ~ 32 文字で、英字、数字、アンダースコア(_)のみ使用できます。英字で始める必要があります。大文字と小文字は区別されません。 |
TopicName | トピック名は 3 ~ 128 文字で、英字、数字、アンダースコア(_)のみ使用できます。英字で始める必要があります。大文字と小文字は区別されません。 |
II. Authorization ヘッダーの署名計算
Authorization = "DATAHUB " + AccessId + ":" + Signature
Signature = base64(hmac-sha1(AccessKey,
HTTPMethod + "\n"
+ Content-Type + "\n"
+ Date + "\n"
+ CanonicalizedDataHubHeaders + "\n"
+ CanonicalizedResource))
AccessKey
: 署名の計算に使用する AccessKey シークレット。HTTPMethod
: PUT、GET、POST、HEAD、DELETE などの HTTP リクエストのメソッド。\n
: 改行。Content-Type
: リクエストのデータシリアル化タイプ。ほとんどの場合、このパラメーターは application/json に設定されます。Date
: リクエストが送信された時刻(GMT)。たとえば、このパラメーターを Sun, 22 Nov 2015 08:16:38 GMT に設定できます。CanonicalizedDataHubHeaders
:x-datahub-
のプレフィックスが付いた HTTP リクエストヘッダー。リクエストヘッダーはアルファベット順に並べられています。CanonicalizedResource
: リクエストされた DataHub リソースの URL。URL に 1 つ以上のパラメーターが含まれている場合、パラメーターはアルファベット順に並べる必要があります。
CanonicalizedDataHubHeaders 文字列の構築
x-datahub-
のプレフィックスが付いたすべての HTTP リクエストヘッダーは、正規化 DataHub ヘッダー
と呼ばれます。CanonicalizedDataHubHeaders 文字列を構築する手順を以下に示します。
x-datahub-
のプレフィックスが付いたすべての HTTP リクエストヘッダーの名前を小文字に変換します。たとえば、X-DATAHUB-Client-Version:1.1
をx-datahub-client-version:1.1
に変換します。Security Token Service (STS)から提供された AccessKey ペアを使用してリクエストが送信される場合は、返されたトークンを
x-datahub-security-token:token
の形式で署名文字列に追加します。取得したすべての HTTP リクエストヘッダーをアルファベット順にソートします。
リクエストヘッダーとその値の間のコロン(:)の両側のスペースをすべて削除します。たとえば、
x-datahub-client-versionn : 1.1
をx-datahub-client-version:1.1
に変換します。リクエストヘッダーとその値のペアを、別のリクエストヘッダーとその値のペアと区切り文字(
\n
)で区切って、CanonicalizedDataHubHeaders
文字列を取得します。
CanonicalizedResource 文字列の構築
リクエストで指定された DataHub リソースは、正規化リソースと呼ばれます。CanonicalizedResource 文字列を構築する手順を以下に示します。
CanonicalizedResource
文字列を空の文字列に設定します。アクセスする DataHub リソースの URL(
/projects/<ProjectName>/topics/<TopicName>
など)を入力します。URL に 1 つ以上のパラメーターが含まれている場合は、アルファベット順に並べ、アンパサンド(&)で区切ります。文字列の末尾に疑問符(?)とパラメーターを追加します。例:
/projects/<ProjectName>/topics/<TopicName>/connectors/sink_odps?donetime
署名文字列の計算
署名文字列は UTF-8 でエンコードする必要があります。中国語が含まれる署名文字列は UTF-8 でエンコードする必要があります。その後、エンコードされた署名文字列を
AccessKey
シークレットと共に使用して署名を計算します。RFC 2104 で定義されている SHA1 アルゴリズムを使用して、署名のハッシュベースメッセージ認証コード(HMAC)値を計算します。
AccessKey
シークレットは、HMAC 計算のキーとして使用されます。x-datahub-
のプレフィックスが付いたヘッダーは、次の要件に準拠する必要があります。ヘッダー名は小文字にする必要があります。
ヘッダーはアルファベット順にソートされます。
ヘッダー名と値の間のコロン(:)の両側にスペースを入れてはいけません。
各ヘッダーの後には改行(\n)が続きます。ヘッダーを使用しない場合は、CanonicalizedDataHubHeaders 文字列を空の文字列に設定します。
例
リクエスト | 署名文字列の計算式 | 署名文字列 |
POST /projects/test_project/topics/test_topic HTTP/1.1 Host: https://dh-cn-hangzhou.aliyuncs.com User-Agent: customer x-datahub-client-version: 1.1 Content-Type: application/json Date: Thu, 10 Jan 2019 07:28:29 GMT | Signature = base64(hmac-sha1(AccessKey,HTTPMethod + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedDataHubHeaders+ CanonicalizedResource)) | POST\napplication/json\nThu, 10 Jan 2019 07:28:29 GMT\nx-datahub-client-version:1.1\n/projects/test_project/topics/test_topic |
Python で署名を計算する方法を次のコードに示します。
import base64
import hmac
import sha
h = hmac.new("****your accessKey*****", // ****ご使用の accessKey*****
"POST\napplication/json\nThu, 10 Jan 2019 07:28:29 GMT\nx-datahub-client-version:1.1\n/projects/test_project/topics/test_topic", sha)
Signature = base64.b64encode(h.digest())
print("Signature: %s" % Signature)
リクエストヘッダーの例:
Authorization ヘッダーの値は、DATAHUB AccessId:Signature 形式です。
POST /projects/test_project/topics/test_topic HTTP/1.1
Authorization: DATAHUB AccessId:Signature
Content-Type: application/json
Date: Thu, 10 Jan 2019 07:28:29 GMT
Host: http://dh-cn-hangzhou.aliyuncs.com
User-Agent: customer
x-datahub-client-version: 1.1
Java 8 で署名を計算する方法を次のコードに示します。
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;
public abstract class Authorization {
private static final String DEFAULT_ENCODING = "UTF-8";
private static final String DEFAULT_HASH = "HmacSHA1";
private static final String X_DATAHUB_PREFIX = "x-datahub";
private static final String HEADER_CONTENT_TYPE = "Content-Type";
private static final String HEADER_DATE = "Date";
static public String getAkAuthorization(Request request) {
String canonicalURL = request.getUrlPath();
String canonicalQueryString = request.getQueryStrings();
String canonicalHeaderString = getCanonicalHeaders(
getSortedHeadersToSign(request.getHeaders()));
String canonicalRequest = request.getMethod().toUpperCase() + "\n" +
canonicalHeaderString + "\n" + canonicalURL;
if (canonicalQueryString != null && !canonicalQueryString.isEmpty()) {
canonicalRequest += "?" + canonicalQueryString;
}
String signature = HMAC1Sign(request.getAccessKey(), canonicalRequest);
return "DATAHUB " + request.getAccessId() + ":" + signature;
}
static private String HMAC1Sign(String accessKey, String canonicalRequest) {
try {
SecretKeySpec signingKey = new SecretKeySpec(accessKey.getBytes(), DEFAULT_HASH);
Mac mac = Mac.getInstance(DEFAULT_HASH);
mac.init(signingKey);
return Base64.getEncoder().encodeToString(
mac.doFinal(canonicalRequest.getBytes(DEFAULT_ENCODING))
).trim();
} catch (Exception e) {
throw new RuntimeException(e.getMessage(), e);
}
}
static private String getCanonicalHeaders(Map<String, String> headers) {
StringBuilder sb = new StringBuilder();
Iterator<Map.Entry<String, String>> pairs = headers.entrySet().iterator();
while (pairs.hasNext()) {
Map.Entry<String, String> pair = pairs.next();
if (pair.getKey().startsWith(X_DATAHUB_PREFIX)) {
sb.append(pair.getKey());
sb.append(":");
sb.append(pair.getValue());
} else {
sb.append(pair.getValue());
}
if (pairs.hasNext()) {
sb.append("\n");
}
}
return sb.toString();
}
static private SortedMap<String, String> getSortedHeadersToSign(Map<String, String> headers) {
SortedMap<String, String> sortedHeaders = new TreeMap<>();
for (Map.Entry<String, String> entry : headers.entrySet()) {
String lowerKey = entry.getKey().toLowerCase();
if (lowerKey.equalsIgnoreCase(HEADER_CONTENT_TYPE) ||
lowerKey.equalsIgnoreCase(HEADER_DATE) ||
lowerKey.startsWith(X_DATAHUB_PREFIX)) {
if (!entry.getValue().isEmpty()) {
sortedHeaders.put(lowerKey, entry.getValue());
}
}
}
if (!sortedHeaders.containsKey(HEADER_CONTENT_TYPE.toLowerCase())) {
sortedHeaders.put(HEADER_CONTENT_TYPE.toLowerCase(), "");
}
return sortedHeaders;
}
// リクエストクラス
public static class Request {
private String accessId;
private String accessKey;
private String urlPath;
private String method;
private Map<String, String> headers;
private String queryStrings;
public String getAccessId() {
return accessId;
}
public Request setAccessId(String accessId) {
this.accessId = accessId;
return this;
}
public String getAccessKey() {
return accessKey;
}
public Request setAccessKey(String accessKey) {
this.accessKey = accessKey;
return this;
}
public String getUrlPath() {
return urlPath;
}
public Request setUrlPath(String urlPath) {
this.urlPath = urlPath;
return this;
}
public String getMethod() {
return method;
}
public Request setMethod(String method) {
this.method = method;
return this;
}
public Map<String, String> getHeaders() {
return headers;
}
public Request setHeaders(Map<String, String> headers) {
this.headers = headers;
return this;
}
public String getQueryStrings() {
return queryStrings;
}
public Request setQueryStrings(String queryStrings) {
this.queryStrings = queryStrings;
return this;
}
}
public static void main(String[] args) {
Map<String, String> headers = new HashMap<>();
headers.put("Date", "Thu, 10 Jan 2019 07:28:29 GMT");
headers.put("x-datahub-client-version", "1.1");
headers.put("Content-type", "application/json");
String accessId = "testKeyID"; // アクセス ID
String accessKey = "testKeySecret"; // アクセスキーのシークレット
String method = "POST";
String path = "/projects/test_project/topics/test_topic";
String canonicalQueryString = ""; // パラメーターはアルファベット順に並んでおり、アンパサンド(&)で区切られています。例:a=x&b=y
Authorization.Request authRequest = new Authorization.Request()
.setAccessId(accessId)
.setAccessKey(accessKey)
.setMethod(method.toUpperCase())
.setUrlPath(path)
.setHeaders(headers)
.setQueryStrings(canonicalQueryString);
System.out.println(Authorization.getAkAuthorization(authRequest));
}
}
III. API 操作
プロジェクトの作成
リクエスト
リクエスト構文
POST /projects/<ProjectName> HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Comment | String | プロジェクトの説明。説明は 1,024 バイトを超えることはできません。 |
レスポンス
レスポンス構文
HTTP/1.1 201 Created
例
リクエストの例
POST /projects/<ProjectName> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: application/json
Content-Length: xxx
{
"Comment": "test project" // テストプロジェクト
}
成功レスポンスの例
HTTP/1.1 201 Created
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Length: 0
プロジェクト情報のクエリ
リクエスト
リクエスト構文
GET /projects/<ProjectName> HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
CreateTime | long | プロジェクトが作成された時刻。単位:秒。 |
LastModifyTime | long | プロジェクトが最後に更新された時刻。単位:秒。 |
Comment | String | プロジェクトの説明。 |
例
リクエストの例
GET /projects/<ProjectName> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Content-Length: xxx
{
"Comment": "test project", // テストプロジェクト
"CreateTime": 1525763481,
"LastModifyTime": 1525763481
}
プロジェクト情報のクエリ
リクエスト
リクエスト構文
GET /projects HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
ProjectNames | List | プロジェクトの名前。 |
例
リクエストの例
GET /projects HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"ProjectNames": [
"project1",
"projcet2"
]
}
プロジェクトの更新
リクエスト
リクエスト構文
PUT /projects/<ProjectName> HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Comment | String | プロジェクトの説明。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
例
リクエストの例
PUT /projects/<ProjectName> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: application/json
Content-Length: xxx
{
"Comment": "update comment" // コメントを更新
}
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Length: 0
プロジェクトの削除
リクエスト
リクエスト構文
DELETE /projects/<ProjectName> HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
例
リクエストの例
DELETE /projects/<ProjectName> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Length: 0
トピックの作成
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName> HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を create に設定します。 |
ShardCount | int | 初期シャード数。 |
Lifecycle | int | データの有効期間(TTL)。 |
RecordType | String | レコードタイプ。有効な値:BLOB および TUPLE。BLOB データ型は非構造化データストレージ用に設計されており、TUPLE データ型は構造化データストレージ用に設計されています。 |
RecordSchema | String | レコードスキーマ。RecordType パラメーターを TUPLE に設定する場合は、レコードスキーマを指定する必要があります。RecordType パラメーターを BLOB に設定する場合は、このパラメーターは不要です。 |
Comment | String | トピックの説明。 |
ExpandMode | String | 拡張モード。拡張モードを有効にする場合は、このパラメーターを extend に設定します。それ以外の場合は、このパラメーターは不要です。 |
レスポンス
レスポンス構文
HTTP/1.1 201 Created
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: application/json
Content-Length: xxx
{
"Action": "create",
"ShardCount": 1,
"Lifecycle": 1,
"RecordType": "TUPLE",
"RecordSchema": "{\"fields\":[{\"name\":\"field1\",\"type\":\"STRING\"},{\"name\":\"field2\",\"type\":\"BIGINT\"}]}}", // {"fields":[{"name":"field1","type":"STRING"},{"name":"field2","type":"BIGINT"}]}
"Comment": "create topic", // トピックを作成
"ExpandMode": "extend"
}
成功レスポンスの例
HTTP/1.1 201 Created
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Content-Length: 0
トピック情報のクエリ
リクエスト
リクエスト構文
GET /projects/<ProjectName>/topics/<TopicName> HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
ShardCount | int | 初期シャード数。 |
Lifecycle | int | データの TTL。 |
RecordType | String | レコードタイプ。有効な値:BLOB および TUPLE。BLOB データ型は非構造化データストレージ用に設計されており、TUPLE データ型は構造化データストレージ用に設計されています。 |
RecordSchema | String | レコードスキーマ。RecordType パラメーターを TUPLE に設定する場合は、レコードスキーマを指定する必要があります。RecordType パラメーターを BLOB に設定する場合は、このパラメーターは不要です。 |
Comment | String | トピックの説明。 |
CreateTime | long | トピックが作成された時刻。 |
LastModifyTime | long | トピックが最後に更新された時刻。 |
例
リクエストの例
GET /projects/<ProjectName>/topics/<TopicName> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
成功レスポンスの例
HTTP/1.1 201 Created
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Content-Length: xxx
{
"ShardCount": 1,
"Lifecycle": 1,
"RecordType": "TUPLE",
"RecordSchema": "{\"fields\":[{\"name\":\"field1\",\"type\":\"STRING\"},{\"name\":\"field2\",\"type\":\"BIGINT\"}]}", // {"fields":[{"name":"field1","type":"STRING"},{"name":"field2","type":"BIGINT"}]}
"Comment": "create topic", // トピックを作成
"CreateTime": 1525763481,
"LastModifyTime": 1525763481
}
トピック情報のクエリ
リクエスト
リクエスト構文
GET /projects/<ProjectName>/topics HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
TopicNames | List | トピックの名前。 |
例
リクエストの例
GET /projects/<ProjectNames>/topics HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"TopicNames": [
"topic1",
"topic2"
]
}
トピックの更新
リクエスト
リクエスト構文
PUT /projects/<ProjectName>/topics/<TopicName> HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Comment | String | トピックの説明。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
例
リクエストの例
PUT /projects/<ProjectName>/topics/<TopicName> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: application/json
Content-Length: xxx
{
"Comment": "update comment" // コメントを更新
}
トピックの削除
リクエスト
リクエスト構文
DELETE /projects/<ProjectName>/topics/<TopicName> HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
例
リクエストの例
DELETE /projects/<ProjectName>/topics/<TopicName> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Length: 0
シャード情報のクエリ
リクエスト
リクエスト構文
GET /projects/<ProjectName>/topics/<TopicName>/shards HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
ShardId | String | シャード ID。 |
State | String | シャードの状態。例:OPENING、ACTIVE、CLOSED。 |
BeginHashKey | String | ハッシュキー範囲の開始ハッシュキー。 |
EndHashKey | String | ハッシュキー範囲の終了ハッシュキー。 |
ParentShardIds | List | 親シャードの情報。 |
例
リクエストの例
GET /projects/<ProjectName>/topics/<TopicName>/shards HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"Shards": [
{
"ShardId": "0",
"State": "ACTIVE",
"BeginHashKey":"00000000000000000000000000000000",
"EndHashKey":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
"ParentShardIds:[]
}
]
}
シャードの分割
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/shards HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を split に設定します。 |
ShardId | String | 分割するシャードの ID。 |
SplitKey | String | シャードの分割に使用するキー。式:SplitKey = BeginHashKey + (EndHashKey - BeginHashKey)/2。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
NewShards | List | 新しいシャードの情報。 |
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/shards HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: application/json
Content-Length: xxx
{
"Action": "split",
"ShardId": "0",
"SplitKye": "7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" // 分割キー
}
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"NewShards": [
{
"ShardId": "1",
"BeginHashKey":"00000000000000000000000000000000",
"EndHashKey":"7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
},
{
"ShardId":"0",
"BeginHashKey":"7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
"EndHashKey":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
}
]
}
シャードのマージ
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/shards HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を merge に設定します。 |
ShardId | String | マージするシャードの ID。 |
AdjacentShardId | String | マージ操作の隣接シャードの ID。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
ShardId | String | 新しいシャードの ID。 |
BeginHashKey | String | ハッシュキー範囲の開始ハッシュキー。 |
EndHashKey | String | ハッシュキー範囲の終了ハッシュキー。 |
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/shards HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: application/json
Content-Length: xxx
{
"Action": "merge",
"ShardId": "0",
"AdjacentShardId": "1"
}
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"ShardId":"2",
"BeginHashKey":"00000000000000000000000000000000",
"EndHashKey":"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
}
カーソルのクエリ
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/shards/<ShardId> HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を cursor に設定します。 |
Type | String | カーソルのクエリに使用するメソッド。有効な値:OLDEST、LATEST、SYSTEM_TIME、SEQUENCE。 |
SystemTime | Int64 | カーソルのシステム時刻。Type パラメーターを SYSTEM_TIME に設定する場合は、このパラメーターを指定します。単位:ミリ秒。 |
Sequence | Int64 | カーソルのシーケンス番号。Type パラメーターを SEQUENCE に設定する場合は、このパラメーターを指定します。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
Cursor | String | カーソルの情報。 |
RecordTime | Int64 | データが DataHub に書き込まれた時刻。単位:ミリ秒。 |
Sequence | Int64 | データが書き込まれたシーケンス番号。シーケンス番号は、単一のシャード内で一意です。 |
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/shards/<ShardId> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: application/json
Content-Length: xxx
{
"Action": "cursor",
"Type": "SEQUENCE",
"Sequence": 1
}
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"Cursor": "30005af19b3800000000000000000000",
"RecordTime": 1525783352873,
"Sequence": 1
}
シャードを指定せずにデータを書き込む
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/shards HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を pub に設定します。 |
ShardId | String | シャード ID。 |
Attributes | Map<String, String> | ユーザー属性。 |
Data | 書き込むデータ。BLOB データ型の場合、値は Base64 エンコードされた文字列です。TUPLE データ型の場合、値は文字列の配列です。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
FailedRecordCount | Int | 失敗レコードの数。 |
FailedRecords | Array | 失敗レコードの詳細情報。 |
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/shards HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Action": "pub",
"Records": [
{
"ShardId": "0",
"Attributes": {
"attr1": "value1",
"attr2": "value2"
},
"Data": ["A","B","3","4"]
}
]
}
// BLOB
{
"Action": "pub",
"Record": [
{
"ShardId": "0",
"Attributes": {
"attr1": "value1",
"attr2": "value2"
},
"Data": "Base64String" // Base64 文字列
}
]
}
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"FailedRecordCount": 1,
"FailedRecords": [
{
"Index": 0,
"ErrorCode": "errorCode", // エラーコード
"ErrorMessage": "errormsg" // エラーメッセージ
}
]
}
データの読み取り
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/shards/<ShardId> HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を sub に設定します。 |
Cursor | String | レコードの読み取りに使用する開始カーソル。 |
Limit | Int | 一度に読み取るレコードの数。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
NextCursor | String | 次のレコードの読み取りに使用するカーソルの情報。 |
SystemTime | Int64 | レコードが DataHub に書き込まれた時刻。単位:ミリ秒。 |
Cursor | String | レコードに対応するカーソルの情報。 |
Sequence | Int64 | レコードが DataHub に書き込まれたシーケンス番号。 |
Attributes | Map | ユーザー属性。 |
Data | リクエストされたデータの情報。 |
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/shards HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Action": "sub",
"Cursor": "30005af19b3800000000000000000000",
"Limit": 1
}
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"NextCursor": "30005af19b3800000000000000090001",
"Records": [
{
"Cursor": "30005af19b3800000000000000000000",
"SystemTime": 1525783352873,
"Sequence": 1,
"Attributes": {
"key1": "value1",
"key2": "value2"
},
"Data": ["AAA", "100"]
}
]
}
フィールドの追加
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName> HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を appendfield に設定します。 |
FieldName | String | フィールド名。 |
FieldType | String | フィールドのデータ型。例:STRING および BIGINT。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Action": "appendfield",
"FieldName": "field1", // フィールド 1
"FieldType": "BIGINT"
}
コネクタの作成
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/connectors/<ConnectorType> HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Type | String | コネクタのタイプ。例:SINK_ODPS。 |
ColumnFields | Array | 同期するフィールド。 |
Config | Map | コネクタの構成。 |
レスポンス
レスポンス構文
HTTP/1.1 201 Created
例
SINK_ODPS タイプのコネクタを作成するためのリクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/connectors/sink_odps HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Type": "SINK_ODPS",
"ColumnFields": ["field1", "field2"], // ["field1", "field2"]
"Config": {
"Project": "odpsProject", // ODPS プロジェクト
"Topic": "odpsTopic", // ODPS トピック
"OdpsEndpoint": "xxx", // ODPS エンドポイント
"TunnelEndpoint": "xxx", // トンネルエンドポイント
"AccessId": "xxx", // アクセス ID
"AccessKey": "xxx", // アクセスキー
"PartitionMode": "SYSTEM_TIME", // パーティションモード
"TimeRange": 60, // 時間範囲
"PartitionConfig": { // パーティション設定
"pt": "%Y%m%d", // 年月日
"ct": "%H%M" // 時分
}
}
}
コネクタ情報のクエリ
リクエスト
リクエスト構文
GET /projects/<ProjectName>/topics/<TopicName>/connectors/<ConnectorType> HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
コネクタ情報のクエリ
リクエスト
リクエスト構文
GET /projects/<ProjectName>/topics/<TopicName>/connectors HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
例
リクエストの例
GET /projects/<ProjectName>/topics/<TopicName>/connectors HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"Connectors": [
"sink_odps", "sink_ads" // "sink_odps", "sink_ads"
]
}
コネクタの削除
リクエスト
リクエスト構文
DELETE /projects/<ProjectName>/topics/<TopicName>/connectors/<ConnectorType> HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
コネクタのリロード
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/connectors/<ConnectorType> HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を reload に設定します。 |
ShardId | String | リロードするシャードの ID。このパラメーターを空のままにすると、コネクタによって指定されたすべてのシャードがリロードされます。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/connectors/<ConnectorType> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Action": "reload"
}
コネクタのシャード状態のクエリ
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/connectors/<ConnectorType> HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を status に設定します。 |
ShardId | String | シャード ID。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
CurrentSequence | Int64 | コンシューマーオフセットのシーケンス番号。 |
State | Enum | シャードの状態。 |
LastErrorMessage | String | シャードの状態が CONTEXT_EXECUTING でない場合に返されるエラーメッセージ。 |
DiscardCount | Int64 | コネクタの起動以降にドロップされたレコードの総数。 |
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/connectors/<ConnectorType> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Action": "status",
"ShardId": "0"
}
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"State": "CONTEXT_EXECUTING", // コンテキスト実行中
"CurrentSequence": 10,
"DiscardCount": 0,
"LastErrorMessage": "" // 最後のエラーメッセージ
}
コネクタのフィールドの追加
リクエスト
リクエスト構文
POST /projects//topics//connectors/ HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を appendfield に設定します。 |
FieldName | String | フィールド名。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/connectors/<ConnectorType> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Action": "appendfiled", // フィールドを追加
"FieldName": "field1" // フィールド 1
}
サブスクリプションの作成
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/subscriptions HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を create に設定します。 |
Comment | String | サブスクリプションの説明。 |
レスポンス
レスポンス構文
HTTP/1.1 201 Created
レスポンスパラメーター
パラメーター | タイプ | 説明 |
SubId | String | サブスクリプション ID。 |
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/subscriptions HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Action": "create",
"Comment": "xxxx" // xxxx
}
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"SubId": "1542078393028fzsZx" // サブスクリプション ID
}
サブスクリプション情報のクエリ
リクエスト
リクエスト構文
GET /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId> HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
SubId | String | サブスクリプション ID。 |
State | Int | サブスクリプションの状態。有効な値は 0 と 1 です。0 はサブスクリプションがオンラインであることを示し、1 はサブスクリプションがオフラインであることを示します。 |
Comment | String | サブスクリプションの説明。 |
例
リクエストの例
GET /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"SubId": "xxxx", // サブスクリプション ID
"Comment": "xxxx", // xxxx
"State": 1
}
サブスクリプション情報のクエリ
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/subscriptions HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を list に設定します。 |
PageIndex | Int | ページ番号。 |
PageSize | Int | 1 ページあたりのエントリ数。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
TotalCount | Int | 返されるエントリの総数。 |
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/subscriptions HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Action": "list",
"PageIndex": 1,
"PageSize": 10
}
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"Subscriptions": [
{
"Comment": "xxxx", // xxxx
"State": 1,
"SubId": "1542079169844gH8HM" // サブスクリプション ID
},
{
"Comment": "xxxx", // xxxx
"State": 1,
"SubId": "1542078393028fzsZx" // サブスクリプション ID
}
],
"TotalCount": 2
}
サブスクリプションの削除
リクエスト
リクエスト構文
DELETE /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId> HTTP/1.1
例
リクエストの例
DELETE /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
サブスクリプション状態の更新
リクエスト
リクエスト構文
PUT /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId> HTTP/1.1
レスポンス
レスポンス構文
HTTP/1.1 200 OK
例
リクエストの例
PUT /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId> HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"State": 0 // 状態
}
コンシューマーオフセットのセッションの作成
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId>/offsets HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を open に設定します。 |
ShardIds | Array | シャードの ID。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
Timestamp | Int64 | コンシューマーオフセットのタイムスタンプ。単位:ミリ秒。 |
Sequence | Int64 | コンシューマーオフセットのシーケンス番号。 |
Version | Int64 | セッションのバージョン。 |
SessionId | String | セッション ID。 |
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId>/offsets HTTP/1.1
x-datahub-client-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Action": "open",
"ShardIds": ["0"]
}
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"Offsets": {
"0": {
"Timestamp": 1000,
"Sequence": 1,
"Version": 1,
"SessionId": "xxx" // セッション ID
}
}
}
コンシューマーオフセット情報のクエリ
リクエスト
リクエスト構文
POST /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId>/offsets HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を get に設定します。 |
ShardIds | Array | シャードの ID。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
レスポンスパラメーター
パラメーター | タイプ | 説明 |
Timestamp | Int64 | コンシューマーオフセットのタイムスタンプ。単位:ミリ秒。 |
Sequence | Int64 | コンシューマーオフセットのシーケンス番号。 |
Version | Int64 | セッションのバージョン。 |
SessionId | String | セッション ID。 |
例
リクエストの例
POST /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId>/offsets HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Action": "get",
"ShardIds": ["0"]
}
成功レスポンスの例
HTTP/1.1 200 OK
x-datahub-request-id: 2018050817492199d6650a00000039
Content-Type: applicaton/json
Conent-Length: xxx
{
"Offsets": {
"0": {
"Timestamp": 1000,
"Sequence": 1,
"Version": 1,
"SessionId": "xxx" // セッション ID
}
}
}
コンシューマーオフセットのコミット
リクエスト
リクエスト構文
PUT /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId>/offsets HTTP/1.1
リクエストパラメーター
パラメーター | タイプ | 説明 |
Action | String | 実行する操作。値を commit に設定します。 |
Timestamp | Int64 | コンシューマーオフセットのタイムスタンプ。単位:ミリ秒。 |
Sequence | Int64 | コンシューマーオフセットのシーケンス番号。 |
Version | Int64 | セッションのバージョン。 |
SessionId | Int64 | セッション ID。 |
レスポンス
レスポンス構文
HTTP/1.1 200 OK
例
リクエストの例
PUT /projects/<ProjectName>/topics/<TopicName>/subscriptions/<SubId>/offsets HTTP/1.1
x-datahub-client-version: 1.1
Date: Tue, 08 May 2018 09:47:48 GMT
Authorization: AuthorizationString
Content-Type: applicaton/json
Conent-Length: xxx
{
"Action": "commit",
"Offsets": {
"0": {
"Timestamp": 1000,
"Sequence": 1,
"Version": 1,
"SessionId": 1 // セッション ID
}
}
}