カテゴリー内の他の記事

Garoon SOAP APIの共通仕様

フォローする

Index

Garoon SOAP APIの概要

Garoon SOAP APIでは、SOAPを使用してガルーンと他システムの連携を行います。Garoon SOAP APIの定義は、WSDL(Web Service Definition Language)によって記述されています。ガルーンが既定のディレクトリにインストールされている場合、下記のURLで確認できます。

  • Garoon on cybozu.com: https://(サブドメイン名).cybozu.com/g/index.csp?WSDL
  • パッケージ版 Windows 環境:http://(インストールしたサーバーの IP アドレスまたはホスト名)/scripts/(インストール識別子)/grn.exe?WSDL
  • パッケージ版 Linux 環境:http://(インストールしたサーバーの IP アドレスまたはホスト名)/cgi-bin/(インストール識別子)/grn.cgi?WSDL

Garoon SOAP APIでは、SOAPとWSDLの次のバージョンを使用します。

SOAP 1.2
WSDL 1.1

SOAP では、XML に基づいたメッセージを通信します。 Garoon SOAP APIでのリクエストとレスポンスの例を以下に示します。

例:リクエスト

POST /g/cbpapi/base/api.csp HTTP/1.1
Host: {subdomain}.cybozu.com
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Header>
    <Action>
      BaseGetApplicationStatus
    </Action>
    <Security>
      <UsernameToken>
        <Username>xxxxxxxxxx</Username>
        <Password>xxxxxxx</Password>
      </UsernameToken>
    </Security>
    <Timestamp>
      <Created>2010-08-12T14:45:00Z</Created>
      <Expires>2037-08-12T14:45:00Z</Expires>
    </Timestamp>
    <Locale>jp</Locale>
  </soap:Header>
  <soap:Body>
    <BaseGetApplicationStatus>
      <parameters></parameters>
    </BaseGetApplicationStatus>
  </soap:Body>
</soap:Envelope>

例:レスポンス

HTTP/1.1 200 OK
Date: Tue, 03 Sep 2013 05:44:26 GMT
Server: Apache
Strict-Transport-Security: max-age=315360000
X-Content-Type-Options: nosniff
X-Cybozu-Forward: 1
X-Cybozu-Product-Id: 00
X-Cybozu-Reminder-Whatsnew: https://{subdomain}.cybozu.com/g/reminder/whatsnew_notifier.csp?
X-Cybozu-Reminder-Schedule: https://{subdomain}.cybozu.com/g/reminder/schedule_notifier.csp?
X-Cybozu-Reminder-Mail: https://{subdomain}.cybozu.com/g/reminder/mail_notifier.csp?
X-Cybozu-User: 10
Content-Type: application/soap+xml; charset="utf-8"
Set-Cookie: CBSESSID=841s3liopdjo47vib0ddc08u3al7r6vl; path=/; secure; HttpOnly
Set-Cookie: GRN_Account=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; secure; httponly
Vary: Accept-Encoding,User-Agent
X-UA-Compatible: IE=Edge,chrome=IE7
Transfer-Encoding: chunked

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:base="http://wsdl.cybozu.co.jp/base/2008">
  <soap:Header>
    <vendor>Cybozu</vendor>
    <product>Garoon</product>
    <product_type>2</product_type>
    <version>3.8.0</version>
    <apiversion>1.3.0</apiversion>
  </soap:Header>
  <soap:Body>
    <base:BaseGetApplicationStatusResponse>
      <returns>
        <application code="portal" status="active"/>
        <application code="space" status="active"/>
        <application code="link" status="active"/>
        <application code="schedule" status="active"/>
        <application code="message" status="active"/>
        <application code="bulletin" status="active"/>
        <application code="cabinet" status="active"/>
        <application code="memo" status="active"/>
        <application code="phonemessage" status="active"/>
        <application code="timecard" status="active"/>
        <application code="todo" status="active"/>
        <application code="address" status="active"/>
        <application code="mail" status="active"/>
        <application code="workflow" status="active"/>
        <application code="report" status="active"/>
        <application code="cbwebsrv" status="active"/>
        <application code="rss" status="active"/>
        <application code="cbdnet" status="active"/>
        <application code="presence" status="active"/>
        <application code="star" status="active"/>
        <application code="notification" status="active"/>
        <application code="cellular" status="active"/>
        <application code="kunai" status="active"/>
        <application code="favour" status="deactive"/>
      </returns>
    </base:BaseGetApplicationStatusResponse>
  </soap:Body>
</soap:Envelope>

認証

Garoon SOAP APIを使用するには、ガルーンに登録したユーザーで認証する必要があります。認証には、WebServicesSecurity(WS-Security)を使用した方式と、Cookieを使用した方式があります。

WS-Securityを用いた認証方式

ログイン名とパスワードを SOAP ヘッダに含めることによって認証を行います。 この認証方式では、リクエストごとに認証を行う必要があります。下記例の「Security」要素が該当の箇所です。

<soap:Header> 
  <Action>BaseGetUserVersions</Action>
  <Security> 
    <UsernameToken> 
      <Username>sato</Username> 
      <Password>PASSWORD</Password> 
    </UsernameToken> 
  </Security> 
  <Timestamp> 
    <Created>2009-06-08T16:08:00Z</Created> 
    <Expires>2016-06-09T16:08:00Z</Expires> 
  </Timestamp> 
</soap:Header>

Cookieを用いた認証方式

セッションIDをCookieとしてリクエストに含めることで、認証を行います。 セッションIDの取得には以下の2つの方法があります。

  1. Util APIのUtilLoginでログインし、セッションIDを取得する 
  2. ブラウザでガルーンにログインし、セッションIDを取得する 

下記に、UtilLoginでセッションIDを取得する際のリクエスト例とレスポンス例を示します。 ※UtilLoginの詳細については、「連携API」を参照してください。

例:リクエスト

POST /g/util_api/util/api.csp HTTP/1.1
Host: {subdomain}.cybozu.com
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
  <soap:Header>
    <Action>UtilLogin</Action>
    <Security></Security>
    <Timestamp>
      <Created>2010-08-12T14:45:00Z</Created>
      <Expires>2037-08-12T14:45:00Z</Expires>
    </Timestamp>
    <Locale>jp</Locale>
  </soap:Header>
  <soap:Body>
    <UtilLogin>
      <parameters>
        <login_name>xxxxxxxxxx</login_name>
        <password>xxxxxxx</password>
      </parameters>
    </UtilLogin>
  </soap:Body>
</soap:Envelope>

例:レスポンス

HTTP/1.1 200 OK
Date: Tue, 03 Sep 2013 08:10:54 GMT
Server: Apache
Strict-Transport-Security: max-age=315360000
X-Content-Type-Options: nosniff
X-Cybozu-Forward: 1
X-Cybozu-Product-Id: 00
X-Cybozu-Reminder-Whatsnew: https://{subdomain}.cybozu.com/g/reminder/whatsnew_notifier.csp?
X-Cybozu-Reminder-Schedule: https://{subdomain}.cybozu.com/g/reminder/schedule_notifier.csp?
X-Cybozu-Reminder-Mail: https://{subdomain}.cybozu.com/g/reminder/mail_notifier.csp?
X-Cybozu-User: 10
Content-Type: application/soap+xml; charset="utf-8"
Set-Cookie: CBSESSID=bmun236bhoifeu2cov6badrh0cs0s1af; path=/; secure; HttpOnly
Set-Cookie: GRN_Account=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/; secure; httponly
Vary: Accept-Encoding,User-Agent
X-UA-Compatible: IE=Edge,chrome=IE7
Transfer-Encoding: chunked

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:admin="http://wsdl.cybozu.co.jp/admin/2008">
  <soap:Header>
    <vendor>Cybozu</vendor>
    <product>Garoon</product>
    <version>3.8.0</version>
    <apiversion>1.3.0</apiversion>
  </soap:Header>
  <soap:Body>
    <admin:LoginResponse>
      <returns>
        <login_name>xxxxxxxxxx</login_name>
        <status>Login</status>
        <cookie>CBSESSID=bmun236bhoifeu2cov6badrh0cs0s1af; path=/</cookie>
      </returns>
    </admin:LoginResponse>
  </soap:Body>
</soap:Envelope>

レスポンス内の「CBSESSID」がCookie名、及び「bmun236bhoifeu2cov6badrh0cs0s1af」がCookie値です。Garoon SOAP APIのリクエストにCookieを含めることで、WS-Securityによる認証は不要になり、リクエストからログイン名とパスワードを省けます。

Garoon SOAP APIリクエストにCookieを含める場合、Cookie名は以下です。

製品 Cookie名
Garoon on Cybozu.com JSESSIONID
パッケージ版 バージョン3.0.0以降 CBSESSID

また、Garoon SOAP APIのリクエストにCookieを含める場合は、以下のようにリクエストヘッダに含めます。

例:Garoon on Cybozu.comで、「UtilGetREquestToken」を実行した場合の例

POST /g/util_api/util/api.csp HTTP/1.1
Host: {subdomain}.cybozu.com 
Content-Type: text/xml; charset=UTF-8 
Cookie: JSESSIONID=smbrfjktphvuc9a1c0er2dpk3e76psj2; 
 
<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
    <soap:Header> 
        <Action>UtilGetRequestToken</Action> 
        <Security> 
            <UsernameToken> 
                <Username></Username>  
                <Password></Password> 
            </UsernameToken> 
        </Security> 
        <Timestamp> 
            <Created>2010-08-12T14:45:00Z</Created> 
            <Expires>2037-08-12T14:45:00Z</Expires> 
        </Timestamp> 
        <Locale>jp</Locale> 
    </soap:Header> 
    <soap:Body> 
        <UtilGetRequestToken> 
            <parameters></parameters> 
        </UtilGetRequestToken> 
    </soap:Body> 
</soap:Envelope> 

Basic認証

  • cybozu.comでBasic認証を利用している場合は、更にリクエストヘッダに「Authorization」ヘッダを追加し、「Basic 」と「ログイン名:パスワード」をBASE64エンコードしたものを値に指定します。
    • 「Basic」 と 「ログイン名:パスワード」 の間は、半角空白が必要です。
    • 「Basic 」の BASE64エンコードは不要です。
// ログイン名が「Administrator」、パスワードが「cybozu」の場合
X-Cybozu-Authorization:QWRtaW5pc3RyYXRvcjpjeWJvenU=

タイムゾーン

Garoon SOAP APIでは、時刻にISO-8601規格のUTC表記を使用します。 例:2010-01-11T01:00:00Z ※UTC以外のタイムゾーンを指定した場合も、UTCとして扱われます。例として、2010-01-11T01:00:00+09:00と指定した場合、2010-01-11T01:00:00Zと指定した場合と同様に扱われます。

ローカライズ

受け取るエラーメッセージの言語を SOAP ヘッダで指定できます。指定できる言語は、日本語(ja)、英語(en)、中国語(zh)のいずれかです。ただし、Language Pack未適応のバージョン 3.0.0, 3.1.0のガルーンでは中国語を使用できません。下記例の「Locale」要素が該当の箇所です。

リクエストトークンが必要なAPI ではLocaleに設定された値よりも「ユーザーが設定している言語」が優先されます。(パッケージ版ガルーン3.5.0以降、Garoon on cybozu.com)

<soap:Header> 
  <Action>BaseGetUserVersions</Action>
  <Security> 
    <UsernameToken> 
      <Username>sato</Username> 
      <Password>PASSWORD</Password> 
    </UsernameToken> 
  </Security> 
  <Timestamp> 
    <Created>2009-06-08T16:08:00Z</Created> 
    <Expires>2016-06-09T16:08:00Z</Expires> 
  </Timestamp> 
  <Locale>ja</Locale> 
</soap:Header>

データのバージョン

Garoon SOAP APIのパラメーターで使用する「version」とは、更新日時のUNIXタイムスタンプです。 APIによっては、versionを使用することによって特定の時刻からの更新状況を取得することができます。

例:リクエスト

<parameters> 
  <user_item id="1" version="1245375234" />
  <user_item id="2" version="1245323905" />
  <user_item id="3" version="1245315235" />
</parameters>

例:レスポンス

<returns> 
  <user_item id="1" version="1245376338" operation="modify" />
  <user_item id="2" version="1245327097" operation="modify" />
  <user_item id="3" version="1245327110" operation="modify" />
  <user_item id="4" version="1245715417" operation="add" />
  <user_item id="5" version="1245715429" operation="add" />
</returns>

更新情報取得API

予定やメッセージ、ユーザー情報などの、ガルーン内で扱う各データの更新情報を、APIで取得できます。例えばユーザーの更新情報を取得したい場合、「BaseGetUserVersions」というAPIで取得します。 これらの更新情報を取得するAPIを利用する際、ユーザーがアクセス可能なデータ全ての更新情報が返される点に注意してください。例えばBaseGetUserVersionsではガルーン内の全ユーザーの更新情報を取得します。場合によってはレスポンスの受信に時間がかかる場合がありますので、予めご了承ください。

エラー処理

Garoon SOAP APIは、エラーが発生したときには、エラーの内容を含んだXMLを返します。ネットワークなど、ガルーン以外で障害が発生したときは、XMLレスポンスは取得できません。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
 xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
 xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
  <soap:Header>
    <vendor>Cybozu</vendor>
    <product>Garoon</product>
    <product_type>2</product_type>
    <version>3.8.0</version>
    <apiversion>1.3.0</apiversion>
  </soap:Header>
  <soap:Body>
    <soap:Fault>
      <soap:Code>
        <soap:Value>soap:Receiver</soap:Value>
      </soap:Code>
      <soap:Reason>
        <soap:Text>リクエストパラメータが不足しています。</soap:Text>
      </soap:Reason>
      <soap:Detail>
        <code>GRN_CBPAPI_63004</code>
        <diagnosis>リクエストパラメータが不足しています。</diagnosis>
        <cause>&quot;user_id&quot;パラメータが必要です。</cause>
        <counter_measure>サイボウズオフィシャルパートナー、または販売元にお問い合わせください。</counter_measure>
              </soap:Detail>
    </soap:Fault>
  </soap:Body>
</soap:Envelope>

エラーメッセージ

すべてのAPIに共通して発生するエラーメッセージについて記述します。各API固有のエラーメッセージについては、各APIの詳細をご覧ください。

エラー番号 説明
GRN_CBPAPI_63004 必要なリクエストパラメーターが不足している場合
GRN_CBPAPI_63006 必要なライセンスの期限が切れている場合
GRN_CMMN_00005 API実行ユーザーが実行権限のない処理を実行した場合

アクセス権

連携APIにおけるガルーンとの連携機能では、ガルーン本体に準拠したアクセス権判定を行っています。API実行ユーザーがアクセス権を与えられていない処理を行った場合、ガルーン本体と同様のアクセス権違反エラーが発生します。

リクエストトークン

セッションで認証してAPIを使用する場合は、リクエストトークンを取得する必要があります。これは、CSRF(クロスサイトリクエストフォージェリ)対策のためです。リクエストトークンはUtilAPIの「UtilGetRequestToken」で取得できます。 このAPIで取得できるトークンは固定トークンで、同一セッション内において使い回すことが可能です。セッションもしくはトークンが不正な場合、「FW00007」エラーが返されます。本エラーが出力された場合は、リクエストトークンを取得し直し、最新のトークンを利用してください。 ※バージョン 3.5.0より前のパッケージ版ガルーンではリクエストトークンは不要です。

APIのバージョン

ガルーンのバージョンによって、Garoon SOAP APIのバージョンが異なります。両者の対応関係は以下のとおりです。

ガルーンのバージョン 連携APIバージョン
パッケージ版 バージョン 3.0.x 1.0.0
パッケージ版 バージョン 3.1.x 1.1.0
パッケージ版 バージョン 3.5.x 1.2.0
パッケージ版 バージョン 3.7.0/3.7.1/3.7.2 1.3.0
パッケージ版 バージョン 3.7.3/3.7.4/3.7.5 1.3.1
パッケージ版 バージョン 4.0.x 1.4.0
パッケージ版 バージョン 4.2.x 1.6.0
パッケージ版 バージョン 4.6   1.10.0
Garoon on cybozu.com 1.10.0

APIを実行できるユーザーの指定(パッケージ版のみ)

パッケージ版のガルーンでは、設定ファイルを編集して、APIの実行を許可するロールを指定できます。初期設定では、Administratorsロールを持つユーザーはすべてのAPIを、その他のユーザーはシステム管理系のAPIを除くAPIのみを使用できます。Garoon on cybozu.comでは、ロールの指定は不要です。すべてのユーザーがすべてのAPI(Admin APIの一部を除く)を使用できます。実行権限を持たないユーザーでAPIを実行したとき、APIはエラー(GRN_CMMN_00005)を返します。

設定ファイル

(CGI 実行可能ディレクトリ)/(インストール識別子)/common.ini
例: Windows環境の場合 C:¥Inetpub¥scripts¥cbgrn¥common.ini
例: Linux環境の場合 /var/www/cgi-bin/cbgrn/common.ini

設定内容

システム管理者用のAPI(「admin」で始まるAPI) は「sysapi_roles」、それ以外の通常ユーザー用のAPI(「util」で始まるAPIは除く)は「papi_roles」で、実行権限を持つロールを設定します。

[API roles] 
sysapi_roles = "roleA" 
papi_roles = "roleA, roleB"

パラメーター名、リクエスト、およびレスポンスの説明の見かた

各アプリケーションのAPIの説明における、パラメーター名、リクエスト、およびレスポンスの説明の見かたを説明します。

パラメーター名

APIのリクエストとレスポンスで使用されるパラメーターの説明では、パラメーター名を「XML Path Language(XPath)」で記述しています。 リクエストの場合、parameters要素からのXPathを、レスポンスの場合、returns要素からのXPathでパラメーター名を記述しています。

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:base="http://wsdl.cybozu.co.jp/base/2008">
  <soap:Header>
    <vendor>Cybozu</vendor>
    <product>Garoon</product>
    <product_type>2</product_type>
    <version>3.8.0</version>
    <apiversion>1.3.0</apiversion>
  </soap:Header>
  <soap:Body>
    <base:BaseGetUserVersionsResponse>
      <returns>
        <user_item id="1" version="1363009269" operation="add"/>
        <user_item id="2" version="1377680211" operation="add"/>
        <user_item id="3" version="1359593131" operation="add"/>
      </returns>
    </base:BaseGetUserVersionsResponse>
  </soap:Body>
</soap:Envelope>

上記例はBase APIの「BaseGetUserVersions」APIのレスポンスです。 この場合、returns要素(リクエストの場合、parameters要素)の子ノードである「user_item」の「id」という名前の属性ノードをXPath表現で記述すると、「user_item/@id」となります。

リクエストとレスポンス

APIのリクエストとレスポンスの例を示すときは、リクエストの場合parameters部分、レスポンスの場合はreturns部分のみを抜き出して記述します。

例:リクエスト

<?xml version="1.0" encoding="utf-8" ?>  
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
  <soap:Header> 
    <Action>BaseGetUserVersions</Action>  
    <Security> 
      <UsernameToken> 
        <Username>Administrator</Username>  
        <Password>123456</Password>  
      </UsernameToken> 
    </Security> 
    <Timestamp> 
      <Created xmlns="">2009-06-08T16:00:00Z</Created>  
      <Expires xmlns="">2016-06-09T16:00:00Z</Expires>  
    </Timestamp> 
  </soap:Header> 
  <soap:Body> 
    <BaseGetUserVersions> 
      <parameters> 
        <user_item id="1" version="11" />  
      </parameters> 
    </BaseGetUserVersions> 
  </soap:Body> 
</soap:Envelope>

例:レスポンス

<?xml version="1.0" encoding="utf-8" ?>  
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"  
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
 xmlns:base="http://wsdl.cybozu.co.jp/base/2008"> 
  <soap:Body> 
    <base:BaseGetUserVersionsResponse> 
      <returns> 
        <user_item id="1" version="1245376338" operation="modify" />  
        <user_item id="2" version="1245327097" operation="add" />  
      </returns> 
    </base:BaseGetUserVersionsResponse> 
  </soap:Body> 
</soap:Envelope>

ファイルアップロード制限

Garoon SOAP APIを利用して添付ファイルをアップロードする場合、ガルーンのシステム設定で、ファイルサイズの上限値が「無制限」の場合も、base64エンコード後のファイルサイズ が90MB 程度のファイルがアップロード可能なファイルサイズの上限になります。

Garoon SOAP APIの注意事項

  • Garoonのユーザ, 組織, ロールのIDは、他のcybozu.comサービスのIDとは値が異なります。
  • リクエストに含まれる要素に xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 以外の namespace が設定されているとエラー(GRN_UTIL_API_65001)が返されます。 

 

記事に関するフィードバック

直接的に記事と関連がないご質問はcybozu developer コミュニティをご活用ください。

Avatar
Kousuke Taniguchi

ローカライズの章にて、下記例の「location」要素が該当の箇所です。とありますが、Localeではありませんか?

Avatar
吉永 年春

cybozu.comのAPIを呼び出す場合は、URLの最後に".csp"を付ける必要がある、との記事を以前どこかで読んだのですが、この制約は現在はなくなったのでしょうか。

■オンプレ
uri = new URI(this.garoonURI.toString() + action.getAPIType().getPath());
■cybozu.com
uri = new URI(this.garoonURI.toString() + action.getAPIType().getPath() + ".csp");

Avatar
Kousuke Taniguchi

cybozu.comの機能にBASIC認証を有効にするオプションがあるのですが、本記事の認証の部分に記載がありません。
KUNAIにはBASIC認証用のオプションがあるので、APIは自動的にBASIC認証が除外されているということではないと思うのですが、記載漏れでしょうか?

Avatar
kyohei-kitagawa

Kousuke Taniguchiさん
cybozu.com developer networkです。
クラウド版の場合は、kintoneなどと同様にリクエストヘッダーで指定していただければと思います。
▼参考
https://cybozudev.zendesk.com/hc/ja/articles/201941754

オンプレ版も基本的には同様ですが、また、オンプレ環境ではWebサーバーの設定を変更することで、BASIC認証だけではなくDIGEST認証なども設定できます。
この場合も類似の対応が必要になりますが、対応内容はWebサーバーの設定に依存します。

記載のほう検討させていただきます。
貴重なご意見ありがとうございます。

Avatar
Kousuke Taniguchi

WSDLに記載されている内容およびAPI実行のURLについて確認させてください。


スケジュール API実行のために、接続するURLはWSDL内の /service/port/soap12:address/@location に示されたURLだと思います。ここにはホスト名含め、絶対URLが記載されますが、このURLに接続しなければならないと思いますが、それであっていますでしょうか?


質問の意図はKUNAIがWSDL内に記載されたURLではなく、ホスト部分を現在接続しているホスト名に置換して接続しているためです。


具体例としてはリバースプロキシを用意して、リバースプロキシ側でX-Forward-Hostなどの拡張ヘッダを設定していない場合です。


特にDMZにリバースプロキシ、ガルーンをイントラに置いた場合は名前解決やルーティングの問題で接続できない筈ですが、KUNAIでは接続できています。


https://support.cybozu.com/ja-jp/article/4088 にあるようにこの挙動自体はKUNAIの仕様だとおもいますが、このような接続を連携アプリにも求められているのでしょうか?


 

Kousuke Taniguchiにより編集されました
Avatar
SUZUKI Shinnosuke

お世話になります。上記Kosuke Taniguchi様と類似の確認となり恐縮です。

【質問】

ペガシス様のGCalConnectionを利用したく考えておりますが、サーバー分割構成 & SSLアクセラレーター(配下のサーバーはhttp)の環境において、httpsによる/?WSDLリクエストで取得したlocationがhttpスキーマとなり、GCalConnectionにてエラーとなってしまいます。ペガシス様に問い合わせましたが、GcalConnection側では対応不可との回答でした。こちらガルーン側で対応できるような設定はございますでしょうか。

【具体例】

リクエスト:https://(hostname)/grn/?WSDL
soap12 address:http://(hostname)/grn/(各種APIアドレス)

お手数ですが、ご確認頂けると幸いです。

Avatar
Kousuke Taniguchi

SUZUKI Shinnosukeさん

こんにちは。Kousuke Taniguchiです。(中の人ではなくてごめんなさい)

もしSSLアクセラレーター側の設定変更が可能であれば、Proxy関連のヘッダの設定をさせてもらうのがよいと思います。

(パートナー窓口経由ですが) 設定例などの文書はないが、リバースプロキシ配下で動くようになっているとは回答いただいていますので、X-Forward-Proto, X-Forward-Hostあたりを設定すればよいはずです。

交渉の余地があるかどうかの問題なので、余地がないのであれば苦しいかもしれません

 

 

Avatar
SUZUKI Shinnosuke

Kousuke Taniguchiさん、ご指南ありがとうございます!

担当に確認してみます!

Avatar
みなとん

お世話になっております。

下記、確認させてください。

現在、定義と実際のレスポンスに差異があるようです。

 

1.サイトに記載されているリクエスト、レスポンス

2.WSDLの定義、XSDの定義

  ※https://(サブドメイン名).cybozu.com/g/index.csp?WSDLからたどれるもの

3.実際にSOAP通信をした結果のレスポンス

具体的には「ScheduleGetFacilitiesById」でレスポンスとして取得できるものとして「@facility_code」がありますが、XSDの定義上は存在しておりません。

 

Axis2等を利用してSOAPクライアント機能を実装する際に、定義と実際のレスポンスが異なっており

正常に動作できないため、新しい定義等がございましたらご教示いただきたいです。

 

以上、よろしくお願いいたします。

 

Avatar
Kousuke Taniguchi

こんにちは。

過去SOAPクライアントを生成するツール類をいくつか試してみましたが、生成できたものはなかったので、どのツールを使って試していらっしゃるのか知りたいです。

ちなみにhttps://static.cybozu.com/g/F10.0.563_7.5/api/2008/schedule.xsd をみると、EventTypeのmembersにはanyAttributeがあるので、定義上は問題ないのではないかとおもいます。

とはいえツールで生成したクライアントが使えなくてよいわけではないですけど。。。。

<xsd:element name="members">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="member" type="MemberType" minOccurs="0" maxOccurs="unbounded"/>
<xsd:any processContents="lax" minOccurs="0" maxOccurs="unbounded" namespace="##local"/>
</xsd:sequence>
<xsd:anyAttribute processContents="lax"/>
</xsd:complexType>
</xsd:element>
 
 
 
Kousuke Taniguchiにより編集されました
Avatar
みなとん

Kousuke Taniguchi さん

 

コメントいただきありがとうございます。

私の方で利用しているツールは「Apache Axis2 1.7.5」となります。

上記でwsdl2javaを実行してJavaのSOAPクライアントを自動生成しております。

足りない定義を補完して自動生成したJavaソースからはリクエスト/レスポンスができることまでは確認済みです。

 

anyAttributeの件、ありがとうございます。この定義は見落としておりました。

この定義があるということはXSDとして間違っているということではないということですね。

※ただ、本サイト上にあるI/Fには沿っていてほしいなぁと思う次第です。。

 

まだ解析の途中段階なのですが、「anyAttribute」の解析にツール側が失敗しているようです。

その失敗がツール側の問題なのか、XSD上の定義方法の問題なのかが現状ははっきりしていない状態です。

なんとなくツール側の問題のような気もしていますが、、、継続で調査してみます。

 

不躾で恐縮ですが、解決方法等ご存知でしたらご教示ください。

 

ここでやり取りするのは適切ではないと思ったため、こちらに転記しました。

 

みなとんにより編集されました
Avatar
K.Saeki

Basic認証の説明とサンプルコードが一致していません。

サンプルコードのままだとうまく行きませんでしたので、

以下の様に記載したらうまく行きました。

// ログイン名が「Administrator」、パスワードが「cybozu」の場合
誤:X-Cybozu-Authorization:QWRtaW5pc3RyYXRvcjpjeWJvenU=
正:Authorization:Basic QWRtaW5pc3RyYXRvcjpjeWJvenU=
ログインしてコメントを残してください。
Powered by Zendesk