JP2018142271A - Api規約チェック装置、api規約チェック方法、およびプログラム - Google Patents

Api規約チェック装置、api規約チェック方法、およびプログラム Download PDF

Info

Publication number
JP2018142271A
JP2018142271A JP2017037507A JP2017037507A JP2018142271A JP 2018142271 A JP2018142271 A JP 2018142271A JP 2017037507 A JP2017037507 A JP 2017037507A JP 2017037507 A JP2017037507 A JP 2017037507A JP 2018142271 A JP2018142271 A JP 2018142271A
Authority
JP
Japan
Prior art keywords
api
name
resource
check
rule file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2017037507A
Other languages
English (en)
Inventor
直樹 武
Naoki Take
直樹 武
吉田 敦
Atsushi Yoshida
敦 吉田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2017037507A priority Critical patent/JP2018142271A/ja
Publication of JP2018142271A publication Critical patent/JP2018142271A/ja
Pending legal-status Critical Current

Links

Images

Abstract

【課題】API仕様書およびAPI規約を入力として、設計したAPIが規約に沿っているかをチェックできるAPI規約チェック装置、API規約チェック方法、およびプログラムを提供する。
【解決手段】API規約チェック装置100は、API仕様書およびAPI規約の入力を受け付け、前記API仕様書から所定の要求項目を取得するAPI仕様書アダプタ部110と、APIに特有のURL、API名、当該API名で扱うリソース名、およびパラメータ名の相互の関係をルールとして記述するルールファイルを格納するルールファイル格納部120と、ルールファイルを参照して、要求項目に対してAPI規定に合わない箇所をチェックするチェック実行部130と、チェック結果の箇所と内容を登録するチェック結果格納部140と、チェック結果をAPI設計者にアウトプットする結果出力部150と、を備える。
【選択図】図1

Description

本発明は、API規約チェック装置、API規約チェック方法、およびプログラム
に関する。
各事業者がサービスを管理するためのAPI(Application Program Interface)をウェブ上にて提供しており、ユーザはAPIを呼び出すソフトウェアを通じてサービスを構築・運用している。APIの仕様(APIの名称、URL(Uniform Resource Locator)、パラメータ等)は、各事業者が規定しており、ユーザは当該規定に従ってAPIを使用する。
事業者によるAPI提供が増えてきており、単一の事業者が複数のサービス用APIを提供したり、複数事業者で同様のサービス用APIが提供されるのが一般的になりつつある。ユーザは、それらのAPIの仕様/(「/」は、「および/または」、を表記する。以下同様。)設計をそれぞれ理解して使い分ける必要があり、負担がかかっている。API設計の違いはAPI普及の阻害要因となっている。
そのため、事業者内/事業者間にて、APIの設計を合わせていく動きが活発になっている。これらの取り組みにおいては、事業者外のガバナンス団体もしくは事業者内のガバナンス組織において、個別の組織/設計者が設計したAPIをレビューし、規約に沿っているか確認することが一般的である。
しかしながら、多くのAPI設計ルール(プロトコルレベル〜パラメータレベル)があり、規約に沿っているかをすべて人手でチェックするのが困難である。
非特許文献1には、語句を入力すると、最小単位に分割してそれぞれでネーミング(英語に変換)する技術が記載されている。非特許文献1に記載の「メソッド名等のネーミングサービス」は、内部に辞書を持ち、日本語を入れるとネーミングの候補を教えてくれる。また、語句を入力すると、最小単位に分割してそれぞれでネーミング(英語に変換)してくれる。変換結果は、snake_case や camelCase で表示可能である。学習機能があり、変換パターンをカスタマイズして定義できる(アカウントごと)。しかし、語句単位の単純変換はできるが、APIのように階層構造を持つ複数の要素の考慮や、変換パターンをルール化しエクスポートして共有する等の使い方はできない。
非特許文献2には、コーディング規約のチェックツール(Eclipse plugin)が記載されている。非特許文献2に記載の技術は、ソースコードにおける中括弧や、空白スペースの記述位置などコーディングスタイルに関する指摘のほか、クラス名、定数、変数、メソッド名などの命名規則がコーディング規約(あるいは命名規約)として定義された規則に従い、正しく記述されているかどうかをチェックする。非特許文献2に記載のコーディング規約のチェックツールは、入力途中でチェック可能である。Sun(登録商標)のコーディング規約に基づいたルール群がデフォルトで提供される。ルール群はXML(Extensible Markup Language)で記述されていて、カスタマイズ可能という特徴がある。
メソッド名等のネーミングサービス,[online],[平成29年2月15日検索],インターネット 〈URL:https://codic.jp/〉 コーディング規約のチェックツール(Eclipse plugin),[online],[平成29年2月15日検索],インターネット 〈URL:http://checkstyle.sourceforge.net/〉
上述したように、人手でチェックするのが大変である。このため、それを解決する関連技術としてはcodic, checkstyleがあるが、それでは下記のようなチェックができない。
(1)URI(Uniform Resource Identifier)の階層制限とリソース/パラメータ構成(後記)
(2)API名とそのAPIで扱うリソース名、パラメータ名の関係(後記)
(3)レスポンスの型とリソース名の関係(単数形/複数形等)(後記)
また、規約の数が増えるにつれて、規約自体の作成と整合性チェックが困難になるが、既存技術によるサポートはない。
このような背景に鑑みて本発明がなされたのであり、本発明は、API仕様書およびAPI規約を入力として、設計したAPIが規約に沿っているかをチェックできるAPI規約チェック装置、API規約チェック方法、およびプログラムを提供することを課題とする。
前記した課題を解決するため、請求項1に記載の発明は、設計したAPIが規約に沿っているかをチェックするAPI規約チェック装置であって、API仕様書および前記APIAPI規約の入力を受け付け、前記API仕様書から所定の要求項目を取得するAPI仕様書アダプタ部と、APIに特有のURL、API名、当該API名で扱うリソース名、およびパラメータ名の相互の関係をルールとして記述するルールファイルを格納するルールファイル格納部と、前記ルールファイルを参照して、前記要求項目に対してAPI規定に合わない箇所を検出するチェック実行部と、を備えることを特徴とするAPI規約チェック装置とした。
また、請求項7に記載の発明は、設計したAPIがAPI規約に沿っているかをチェックするAPI規約チェック装置が、前記API仕様書および前記API規約の入力を受け付け、前記API仕様書から所定の要求項目を取得するステップと、APIに特有のURL、API名、当該API名で扱うリソース名、およびパラメータ名の相互の関係をルールとして記述するルールファイルを格納するステップと、前記ルールファイルを参照して、前記要求項目に対してAPI規定に合わない箇所を検出するステップと、を実行することを特徴とするAPI規約チェック方法とした。
また、請求項8に記載の発明は、設計したAPI(Application Program Interface)がAPI規約に沿っているかをチェックするAPI規約チェック装置としてのコンピュータを、API仕様書および前記API規約の入力を受け付け、前記API仕様書から所定の要求項目を取得するAPI仕様書アダプタ手段、APIに特有のURL、API名、当該API名で扱うリソース名、およびパラメータ名の相互の関係をルールとして記述するルールファイルを格納するルールファイル格納手段、前記ルールファイルを参照して、前記要求項目に対してAPI規定に合わない箇所を検出するチェック実行手段、として機能させるためのプログラムとした。
このようにすることで、API仕様書およびAPI規約を入力として、設計したAPIが規約に沿っているかをチェックできる。このため、API設計者および、ルールファイルをインプットするAPI統制者によるAPI規約チェックの簡易化が可能になる。
また、請求項2に記載の発明は、前記ルールファイル格納部は、前記ルールファイルとして、チェック対象となる項目を指定するチェック対象定義ルールファイル、API名、リソース名、パラメータ名に用いる類義語を定義する類義語定義ルールファイル、ホスト名、API名、バージョン名の順番および有無を定義するURI構成定義ルールファイル、API名の候補および/または命名ルール、並びに前記API名で扱うリソース名を定義するAPI名定義ルールファイル、リソース名の候補および、前記リソース名のリソースに関する操作一覧とインプット、アウトプットとを規定するリソース定義ルールファイル、リソース定義に用いるデータスキーマを規定するスキーマ定義ルールファイルのうち、少なくともいずれか1つを含むことを特徴とする請求項1に記載のAPI規約チェック装置とした。
このようにすることで、チェック実行部によって、対応する各ルールファイルが参照されて、APIに特有のURL、リソース名、パラメータ名の相互の関係が加味され、設計したAPIが規約に沿っているかをチェックできる。
また、請求項3に記載の発明は、前記ルールファイル格納部が、前記ルールファイルの定義を標準API仕様書のフォーマットに合わせることを特徴とする請求項1または請求項2に記載のAPI規約チェック装置とした。
このようにすることで、同じロジックを用いて、標準API仕様書をもとにAPI規約を定義するルールファイル自体のチェックも可能となる。また、一部の規約チェック機能は、ルールファイルに対しても適用できるため、API規約作成自体もサポートが可能になる。これにより、ルールファイルをインプットするAPI統制者の稼働を削減することができ、API規約の精度向上につながる。
また、API規約が変わった場合でも、上記ルールファイルを更新するだけで自動チェックが可能になる。
また、請求項4に記載の発明は、前記チェック実行部が、レスポンスの型とリソース名の関係、および前記レスポンスの型と前記リソース名が、単数形または複数形であることのチェックを行うことを特徴とする請求項1に記載のAPI規約チェック装置とした。
このようにすることで、表層の名前合わせだけでなく、レスポンスの型とリソース名の関係、単数形または複数形を相互の関係のルールとしてその記述をチェックでき、またバージョン管理することができる。その結果、API設計の精度向上を図ることができる。
また、請求項5に記載の発明は、前記チェック実行部が、前記API規約としてURIの階層の数が制限される場合、当該制限により影響があるリソースの構造と前記パラメータ名のチェックを行うことを特徴とする請求項1に記載のAPI規約チェック装置とした。
このようにすることで、URIの階層の数の制限で影響があるリソースの構造とパラメータ名についてもチェックを行うことができるとともに、リソース階層の数を変更した場合であってもリソースの構造とパラメータ名のチェックすることができる。
また、請求項6に記載の発明は、前記チェック実行部は、URI構成のチェックを行うURI構成チェック部、前記API名のチェックを行うAPI名チェック部、前記リソース名のチェックを行うとともに、前記リソース名の単数形および/または複数形規約をチェックするリソース名チェック部、前記パラメータ名のチェックを行うパラメータ名チェック部、前記API名と前記リソース名との対応チェックを行うAPI名−リソース名対応チェック部、前記リソース名と前記パラメータ名との対応チェックを行うリソース名−パラメータ名対応チェック部、リソース階層の数をチェックするリソース階層数チェック部のうち、少なくともいずれか1つを備えることを特徴とする請求項1に記載のAPI規約チェック装置とした。
このようにすることで、チェック実行部の各チェック部が、対応する各ルールファイルを参照して、APIに特有のURL、リソース名、パラメータ名の相互の関係を加味して、設計したAPIが規約に沿っているかをチェックできる。
本発明によれば、API仕様書およびAPI規約を入力として、設計したAPIが規約に沿っているかをチェックできるAPI規約チェック装置、API規約チェック方法、およびプログラムを提供することができる。
本発明の実施形態に係るAPI規約チェック装置を示す構成図である。 本発明の実施形態に係るAPI規約チェック装置の各機能部によって参照されるチェック対象定義ルールファイルの一例を示す図である。 本発明の実施形態に係るAPI規約チェック装置のチェック対象定義ルールファイルを参照した各機能部が実行する処理を示す図である。 本発明の実施形態に係るAPI規約チェック装置のURI構成チェック部におけるURI構成のチェックの概要を示す図である。 本発明の実施形態に係るAPI規約チェック装置のURI構成チェック部におけるURI構成のチェックの詳細を説明する図であり、(a)は、API仕様書の一例を示す図、(b)は、URI構成定義ルールファイルのうち、(A)API名はホスト名の後である場合の一例と、(B)API名はホスト名の前である場合の一例とを示す図である。 本発明の実施形態に係るAPI規約チェック装置のAPI名チェック部のAPI名チェックの詳細を説明する図であり、(a)は、API仕様書の一例を示す図、(b)は、ルールファイル格納部のルールファイルのうち、API名定義ルールファイルと類義語定義ルールファイルの一例を示す図である。 本発明の実施形態に係るAPI規約チェック装置のリソース名チェック部のリソース名チェックの詳細を説明する図であり、(a)は、API仕様書の一例を示す図、(b)は、ルールファイル格納部のルールファイルのうち、リソース定義ルールファイルと類義語定義ルールファイルの一例を示す図である。 本発明の実施形態に係るAPI規約チェック装置のリソース名チェック部のリソース名チェックの詳細を説明する図であり、(a)は、API仕様書の一例を示す図、(b)は、ルールファイル格納部のルールファイルのチェック対象定義ルールファイルの一例を示す図である。 本発明の実施形態に係るAPI規約チェック装置のリソース名チェック部のリソース名チェックの詳細を説明する図であり、(a)は、API仕様書の一例を示す図、(b)は、ルールファイル格納部のルールファイルのうち、リソース定義ルールファイルと類義語定義ルールファイルの一例を示す図である。 本発明の実施形態に係るAPI規約チェック装置のパラメータ名チェック部のパラメータ名のチェックの詳細を説明する図であり、(a)は、API仕様書の一例を示す図、(b)は、ルールファイル格納部のルールファイルのうち、リソース定義ルールファイルとスキーマ定義ルールファイルと類義語定義ルールファイルの一例を示す図である。 本発明の実施形態に係るAPI規約チェック装置のパラメータ名チェック部の単数形/複数形規約チェックの詳細を説明する図であり、(a)は、API仕様書の一例を示す図、(b)は、ルールファイル格納部のルールファイルのうち、チェック対象定義ルールファイルの一例を示す図である。 本発明の実施形態に係るAPI規約チェック装置のリソース名−パラメータ名対応チェック部のリソース名とパラメータ名の対応チェックの詳細を説明する図であり、(a)は、API仕様書の一例を示す図、(b)は、リソース名−パラメータ名対応チェック部のルールファイルのうち、リソース定義ルールファイルおよびスキーマ定義ルールファイルの一例を示す図である。 本発明の実施形態に係るAPI規約チェック装置のリソース階層数チェック部におけるリソース名の階層数チェックの詳細を説明する図であり、(a)は、API仕様書の一例を示す図、(b)は、ルールファイル格納部のルールファイルのチェック対象定義ルールファイルの一例を示す図である。 本発明の実施形態に係るAPI規約チェック装置のリソース階層数チェック部の階層数変更提案の詳細を説明する図であり、(a)は、リソース名に階層の数ポリシーに反する部分を有するリソース定義ルールファイル125を示す図、(b)は、リソース名に階層の数ポリシーに反する部分を有するスキーマ定義ルールファイルを示す図である。 本発明の実施形態に係るAPI規約チェック装置の低階層化する場合の、リソース階層数チェック部の階層数変更提案の詳細を説明する図であり、(a)は、低階層化されたリソース定義ルールファイル125を示す図、(b)は、低階層化されたスキーマ定義ルールファイル126を示す図である。 APIの用語の定義を説明する図である。 URIの階層制限とリソース/パラメータ構成を示す図である。 API名とリソース名、パラメータ名の関係を示す図である。 レスポンスの型とリソース名の関係を示す図であり、(a)はAPIのリソース名“products”の場合を示し、(b)は(a)の“products”の場合のレスポンスを示し、(c)はAPIのリソース名“profile”の場合を示し、(d)は“profile”の場合のレスポンスを示す図である。
以下、図面を参照して本発明を実施するための形態(以下、「本実施形態」という)におけるAPI規約チェック装置等について説明する。
API仕様書、およびAPI規約を入力として、設計したAPIが規約に沿っているかを自動的にチェックするAPI規約チェック方法に適用した例である。
(背景説明)
まず、APIの用語の定義について説明する。
図16は、APIの用語の定義を説明する図である。図16(a)は、HTTPメソッド名およびURI(Uniform Resource Identifier)で示されるリクエスト、図16(b)は、このリクエストに対するレスポンスを示す。
WebAPIで機能を公開しているサーバに対して、インターネットなどの通信ネットワークを通じて依頼内容をHTTPリクエストの形で送信すると、処理結果がHTTPレスポンスの形で送られてくる。送受信されるデータの形式は、APIによって様々である。
図16(a)に示すように、APIのリクエストは、GET,POST,PUT,DELETEなどの操作/オペレーション(動詞)で示されるメソッド名と、HTTPなどのハイパーテキスト転送プロトコルおよびホスト名と、API名と、バージョン名と、リソース名およびそのIDと、からなる。「/」は、ホスト名、API名、バージョン名、リソース名とそのIDとを区切る区切記号である。
図16(a)の場合、リソースの階層は1層であり、ホスト名「api.sample.com」、API名「customerManagement」、バージョン名「v1」、リソース名「customer」とそのID「10」が記述されている。上記ホスト名、API名、バージョン名、リソース名とそのIDは、リクエストのURIである。なお、図16(a)では、キャメルケースで記載されているが、スネークケースで記載される場合もある(以下同様)。
図16(b)は、図16(a)のリクエストに対するレスポンスの記載を示している。
図16(b)に示すレスポンスは、下記構成である。
customer : {
id: 10,
name: “Taro Yamada”,
:
}
リソース「customer」(“顧客”の意)の構成要素として、そのID「id: 10」、顧客名「name: “Taro Yamada”」が記載される。上記「id」と「name」はパラメータ名と呼ばれる。
[リソースの階層制限とリソース/パラメータ構成]
図17は、リソースの階層制限とリソース/パラメータ構成を示す図である。
図17(a)に示すように、APIのリクエストは、GET,POST,PUT,DELETEなどのメソッド名と、HTTPなどのハイパーテキスト転送プロトコルおよびホスト名と、階層順に記述されるリソース名およびそのIDと、からなる。「/」は、ドメイン名、リソース名とそのIDとを区切る。
図17(a)の場合、URIの階層は2階層であり、階層1のリソース名とそのID「user/12(12はidを示す)」に、階層2のリソース名とそのID「article/40(40はidを示す)」が記述されている。
API規約としてURIの階層の数を制限したい場合もあり、制限によってはリソースの構造とパラメータ名に影響が及ぶ場合がある。
例えば、図17(b)に示すように、ある事業者のAPI規約(ルールファイル)では、URIは1階層のみであるとする。この場合、このAPI規約に沿うために、図17(a)に示すAPIを、クエリで指定する案1か、メソッド名をGETからPOSTにし、POSTのBodyに記載する案2がある。なお、案1のリソース名「article」とリソース名「userId」を繋ぐ「?」はクエリパラメータである。
図17(c)に示す階層1のリソース名とそのID「User/12(12はidを示す)」と、階層2のリソース名とそのID「article/40(40はidを示す)」を、1階層で記載するには、図16(c)の白文字矢印の右側に示すように、リソース名「article/id:/title:/userId」(userId がarticleに所属する)と記載する。
ここで、リソースarticleのパラメータとして“userId”, “username”等はもともと定義されていないが、こうした制約が存在した場合には規約違反ではないと判定できる必要がある。また、クエリで指定する上記案1か、POSTにしてBodyに記載する上記案2という回避策があるが、どちらのポリシーを取るかが全体として揃っている必要がある。
[API名とリソース名、パラメータ名の関係]
図18は、API名とリソース名、パラメータ名の関係を示す図である。
図18に示すように、APIは、API名(例えばcustomerManagement)と、その下にリソース名(customer,customerAccount,customerPaymentMean,…)と、その下にパラメータ名(id,name,contactMedium,customerAccount,…)と、の階層構造をもつ。
API名、リソース名、パラメータ名には、それぞれ対応関係があるため、単体のネーミングとしては問題なくても、構造の中では不適切な場合がある。また、これらの対応関係を考慮することで、より精度の高い提案(サジェスト)が可能になる。例えば、リソース名として “client”と入力している場合、単体のネーミングとしては問題ない。しかし、パラメータ名にcontactMediumやcustomerAccountを定義しているので、リソース名が“client”であることは不適切であり、この場合のリソース名は“customer”を意味している可能性が高いなどである。
[レスポンスの型とリソース名の関係]
図19は、レスポンスの型とリソース名の関係を示す図である。
レスポンスの型によって、リソース名に制約を持たせたい場合が存在する。例えば、レスポンスがリストの場合、APIのリソース名を複数形にする等である。
図19(a)に示すリソース名“products”を取得する例では、そのレスポンスが図19(b)に示すように、
products: [
{id: 1, name: “Abcde Z1f”, …},
{id: 2, name: “Phone 7”, …},

]
であり、レスポンスがリストである。この場合、図19(a)に示すAPIのリソース名が“product”(単数) ではなく“products”(複数)となっているのは規約に沿っていると判断できる。
一方、図19(c)(d)に示す例では、レスポンス“profile”はリストではなく、単一のオブジェクトであるため、リソース名が“profile”(単数)となっていることは規約に沿っている。
APIのパラメータ名とその型の例は以下のようなものである。
profile: {
“name”: “aaaaa”,
“company”: “bbbbb”,
“interests”: [
{ “name”: “music”},
{ “name”: “programming”}
]
}
この、“interests”は配列となっているので、“interest”ではなくて“interests”であるのは正しい、という例である。
以上述べたAPI名とリソース名、パラメータ名の関係、およびレスポンスの型とリソース名の関係をトータルでチェックできる必要がある。
(実施形態)
図1は、本発明の実施形態に係るAPI規約チェック装置を示す構成図である。
API規約チェック装置100は、設計したAPIが規約に沿っているかをチェックする。
図1に示すように、API規約チェック装置100は、API仕様書アダプタ部110(API仕様書アダプタ手段)と、ルールファイル格納部120(ルールファイル格納手段)と、チェック実行部130(チェック実行手段)と、チェック結果格納部140と、結果出力部150と、を備える。
[API仕様書アダプタ部110]
API仕様書アダプタ部110は、API仕様書1の入力を受け付け、チェック実行部130から要求される項目としてAPI名、リソース名等を取得する。API仕様書アダプタ部110は、それらの取得したAPI名、リソース名等をメモリ上などに保持する。本実施形態では、swagger specification形式(以下、swagger spec形式という)で書かれたAPI仕様書用のアダプタを例として挙げるが、別のアダプタを用意すれば他の形式にも対応可能である。
上記swagger spec形式は、API仕様書のマシンリーダブルな記法(YAML:YAML Ain't Markup Language)であり、YAML(YAML Ain't Markup Language)等の形式で記述される。swaggerは、Open API Initiativeで標準化を目指している。
[ルールファイル格納部120]
ルールファイル格納部120は、APIに特有のURL、API名、当該API名で扱うリソース名、およびパラメータ名の相互の関係をルールとして記述するルールファイルを格納する。
ルールファイル格納部120は、チェック対象定義ルールファイル121と、類義語定義ルールファイル122と、URI構成定義ルールファイル123と、API名定義ルールファイル124と、リソース定義ルールファイル125と、スキーマ定義ルールファイル126と、を備える。
ここで、上記ルールファイルは、API統制者によって予めインプットされる。
また、ルールファイル格納部120におけるルールファイルの記述形式は任意だが、swagger等の標準API仕様書のフォーマットに合わせることが好ましい。
チェック対象定義ルールファイル121は、チェック対象となる項目を指定する。
類義語定義ルールファイル122は、API名、リソース名、パラメータ名に用いる類義語を定義する。
URI構成定義ルールファイル123は、ホスト名、API名、バージョン名の順番および有無を定義する。
API名定義ルールファイル124は、API名の候補/命名ルール、並びにAPI名で扱うリソース名を定義する。
リソース定義ルールファイル125は、リソース名の候補および、リソース名のリソースに関する操作一覧とインプット、アウトプットとを規定する。リソース定義ルールファイル125は、swaggerと同形式で規定する。
スキーマ定義ルールファイル126は、リソース定義に用いる、データスキーマの詳細を規定(パラメータ名を含む)する。スキーマ定義ルールファイル126は、swaggerと同形式で規定する。
[チェック実行部130]
チェック実行部130は、ルールファイル格納部120に格納されたルールファイルを参照して、要求項目に対してAPI規定に沿わない可能性がある箇所(API規定に合わない箇所)をチェックする。
チェック実行部130は、レスポンスの型とリソース名の関係、および前記レスポンスの型とリソース名が単数形または複数形であることのチェックを行う。
チェック実行部130は、API規約としてURIの階層の数を制限する場合、当該制限により影響があるリソースの構造と前記パラメータ名のチェックを行う。
チェック実行部130は、URI構成チェック部131と、API名チェック部132と、リソース名チェック部133と、パラメータ名チェック部134と、API名−リソース名対応チェック部135と、リソース名−パラメータ名対応チェック部136と、リソース階層数チェック部137と、を備える。
URI構成チェック部131は、URI構成のチェックをする(チェックの具体的内容は後記)。
API名チェック部132は、API名のチェックをする(チェックの具体的内容は後記)。
リソース名チェック部133は、リソース名のチェックをする(チェックの具体的内容は後記)。また、リソース名チェック部133は、リソース名の単数形/複数形規約をチェックし(チェックの具体的内容は後記)、ルールファイル自体をチェック対象とすることができる。
パラメータ名チェック部134は、パラメータ名のチェックをする。
API名−リソース名対応チェック部135は、API名とリソース名の対応チェックをする。
リソース名−パラメータ名対応チェック部136は、リソース名とパラメータ名の対応チェックをする。
リソース階層数チェック部137は、リソース階層の数をチェックする。リソース階層数チェック部137は、ルールファイル自体をチェック対象とすることができる。リソース階層数チェック部137は、リソース階層の数を変更したルールファイル/API仕様書記述をチェック結果格納部140に登録する(詳細は後記)。
[チェック結果格納部140]
チェック結果格納部140は、チェック結果として、(1)警告と(2)注意とに分けて該当箇所と内容を登録する。
[結果出力部150]
結果出力部150は、チェック結果格納部140によるチェック結果を元に、設計者に対してアウトプットを行う。アウトプット形式は、リアルタイムなエディタ上への補完やポップアップを例として挙げるが、別の出力部を用意すればログファイルへの出力等も可能である。
以下、上述のように構成されたAPI規約チェック装置100のAPI規約チェック方法について説明する。
[チェック対象定義]
まず、チェック対象定義について説明する。
図2は、各機能部によって参照されるチェック対象定義ルールファイル121の一例を示す図である。チェック対象定義ルールファイル121は、チェック対象となる項目を指定するものである。
図2に示すように、このチェック対象定義ルールファイル121には、
checkTargets:
- URI
- apiIName
- resourceName:
singularPluralPolicy: “pluralIfArray”
- parameterName:
singularPluralPolicy: “pluralIfArray”
- apiName-resourceName
- resourceName-parameterName
- maxHierarchy: 2
が定義されている。
なお、上記記述方法は一例であり、同様の内容が記述されていれば、この記法に限定するものではない。
このチェック対象定義ルールファイル121では、チェックターゲットとして、URI構成チェック部131「URI」と、API名チェック部132「apiName」と、リソース名チェック部133「resourceName」と、パラメータ名チェック部134「parameterName」と、API名−リソース名対応チェック部135「apiName-resourceName」と、リソース名−パラメータ名対応チェック部136「resourceName-parameterName」と、リソース階層数チェック部137「maxHierarchy」と、を参照することが定義されている。
図3は、チェック対象定義ルールファイル121を参照した各機能部が実行する処理を示す図である。
各機能部において、チェック対象定義ルールファイル121(図2参照)を参照し、チェック対象となっていた場合、それぞれの処理を実行する。
URI構成チェック部131は、チェック対象定義ルールファイル121で項目「URI」が指定されている。この場合、URI構成チェック部131は、URI構成のチェックをする。
API名チェック部132は、チェック対象定義ルールファイル121で項目「apiName」が指定されている。この場合、API名チェック部132は、API名のチェックをする。
リソース名チェック部133は、チェック対象定義ルールファイル121で項目「resourceName」が指定されている場合、リソース名チェック部133は、リソース名のチェックをする。項目「resourceName」が指定されていない(記述されていない)場合、チェックをしない。「resourceName」が記述されている場合で、さらに「singularPluralPolicy」が指定されている場合には、リソース名の単数形/複数形規約をチェックする。具体的には、singular: すべて単数形、plural: すべて複数形、pluralIfArray: リストの場合は複数形、がある。
パラメータ名チェック部134は、チェック対象定義ルールファイル121で項目「parameterName」が指定されている場合、パラメータ名のチェックをする。項目「parameterName」が指定されていない(記述されていない)場合、チェックをしない。「parameterName」が記述されている場合で、さらにまた、singularPluralPolicyが指定されている場合には、パラメータ名の単数形/複数形規約をチェックする。具体的には、singular: すべて単数形、plural: すべて複数形、pluralIfArray: リストの場合は複数形、がある。
API名−リソース名対応チェック部135は、チェック対象定義ルールファイル121で項目「apiName-resourceName」が指定されている場合、API名とリソース名の対応チェックをする。
リソース名−パラメータ名対応チェック部136は、チェック対象定義ルールファイル121で項目「resourceName-parameterName」が指定されている場合、リソース名とパラメータ名の対応チェックをする。
リソース階層数チェック部137は、チェック対象定義ルールファイル121で項目「maxHierarchy」が指定されている場合、リソース階層の数(リソース階層の最大値)をチェックする。「maxHierarchy」が指定されていない(記述されていない)場合は、チェックを行わない。また、“maxHierarchy”だけ記述されており、その後に数字が書いていない場合は、単に文法エラーとし、定義ファイルの書き方の規則として、maxHierarchyを書くときは、必ず値となる数字を書く、ということにしておく。
[API仕様書アダプタ部の動きの説明]
API仕様書アダプタ部110の動きについて説明する。
swagger用のAPI仕様書アダプタ部110の場合、以下のようなロジックがアダプタに記述されている。
「ホスト名」「API名」「バージョン名」「リソース名の前までのURL」「リソース名」「階層数」「メソッド名」「(リクエスト/レスポンス)パラメータ名」「リストフラグ」が結果として取得され、これらは他の機能部から読み出せる。そのため、API仕様書アダプタ部110は、他の機能部より先に実行されている必要がある。
1.“host”の値を「ホスト名」とする。
2.basePathの値を抽出する。“/”で区切られている場合、要素ごとに抽出する(後記図5における“articleManagement”と”v1”参照)。
3.v+数字、もしくは数字だけの要素があれば、それを「バージョン名」とする。それ以外を「API名」とする(“articleManagement”)。もしそれ以外が存在しない場合、ホスト名の最初のドットの前(“api”)を「API名」とする。
4.URLチェック等に使用するため、「リソース名の前までのURL」を生成する。具体的には、hostの値、basePathの値をつなげる。
5.pathsの要素を読み出し、最後の“/”の後を「リソース名」とする。
6.上記5.において、“/”の数から、各リソースが何階層目にあるか(「階層数」)を判別する。後記図13(a)の場合、usersに対しては“/”が1つなので1階層目、articlesに対しては“/”が3個なので、2階層目というように、
階層の数=[n/2]+1 (n: “/”の数, []はガウス記号であり、切り捨てを意味する)とする。
7.リソース名直下にある要素を「メソッド名」として抽出(“get”等)する。
8.“parameters”配下の”name”を「リクエストパラメータ名」として抽出する。
9.responses.schema.typeを参照し、”array”であればレスポンスがリストであると判断し、当該リソースの「リストフラグ」をtrueにする。
10.responses.schema.items.propertiesを参照し、「レスポンスパラメータ名」として抽出(他所の参照”$ref:”が指定してある場合、そちらも参照)する。
11.各パラメータに対し、typeが”array”であれば、「リストフラグ」をtrueとする。
[URI構成のチェック]
次に、図4および図5を参照してURI構成のチェックについて説明する。
図4は、URI構成チェック部131におけるURI構成のチェックの概要を示す図である。
図4に示すように、API仕様書アダプタ部110(図1参照)は、API仕様書1を有するサーバとの間でURIパスを生成し、API仕様書1を読み込み、API名、リソース名等、URI構成チェック部131から要求される項目を取得する。
URI構成チェック部131は、チェック対象定義ルールファイル121とURI構成定義ルールファイル123とを参照してURI構成のチェックを行い、結果出力部150に出力する。
図5は、URI構成チェック部131におけるURI構成のチェックの詳細を説明する図であり、図5(a)は、API仕様書1の一例を示す図、図5(b)は、ルールファイル格納部120(図1参照)のURI構成定義ルールファイル123のうち、「(A)API名はホスト名の後」である場合の一例と、「(B)API名はホスト名の前」である場合の一例とを示す。
図5(a)に示すAPI仕様書1は、
host: api.sample.com
basePath: /articleManagement/v1
paths:
/users:
/articles:
であり、API名は、
articleManagement
である。
API仕様書アダプタ部110(図1参照)により、API仕様書1(図1参照)から、「リソース名の前までのURI」が生成されていることを前提とする。図5(a)の例の場合、「api.sample.com/articleManagement/v1」となる。
URI構成チェック部131(図1参照)は、図5(b)に示すチェック対象定義ルールファイル121とURI構成定義ルールファイル123とを参照してURI構成のチェックを行う。
URI構成チェック部131は、API仕様書アダプタ部110(図1参照)よりホスト名、API名、バージョン名をそれぞれ取得する。それらとURI構成定義ルールファイル123の記載を基に、URI((1))を作成する。同様に、API仕様書アダプタ部110(図1参照)よりリソース名の前までのURL((2))を取得する。URL(1)とURL(2)を比較し、一致していたら規約に沿っているため何もせず、不一致であれば警告“URIの構成が規約に沿っていません”を結果としてチェック結果格納部140に登録する。例えば、(A)の場合、URL(1)は“api.sample.com/articleManagement/v1”となりURL(2)と等しいため、規約に沿っている。一方、(B)の場合、URL(1)は“articleManagement.api.sample.com/v1”となり、URL(2)と不一致のため、規約違反となる。
[API名のチェック]
次に、図6を参照してAPI名のチェックについて説明する。
図6は、API名チェック部132のAPI名チェックの詳細を説明する図であり、図6(a)は、API仕様書1の一例を示す図、図6(b)は、ルールファイル格納部120(図1参照)のルールファイルのうち、API名定義ルールファイル124と類義語定義ルールファイル122の一例を示す図である。
図6(a)に示すAPI仕様書1は、
host: api.sample.com
basePath: / customerManagement/v1
paths:
/users:
/articles:
であり、API名は、
customerManagement
である。なお、上述した図5のAPI仕様書1とAPI名が異なっている。
API仕様書アダプタ部110(図1参照)により、API仕様書1(図1参照)から、API名が取得されていることを前提とする。図6(a)の例では、customerManagementがAPI名となる。
API名チェック部132のAPI名チェックのうち、API名定義ルールファイル124を用いたAPI名チェックの具体例は、下記である。
図6(b)のAPI名定義ルールファイル124は、
apiName:
names:
- userManagement:
description: ユーザ管理API
resources:
- users
- articleManagement
description: 記事管理API
resources:
- articles
- /*Management/
style: camelCase
である。
API名チェック部132(図1参照)は、図6(b)に示すAPI名定義ルールファイル124を参照し、抽出したAPI名が候補に該当するかチェックする。該当するものがなければ、警告 ”API名がルールに従っていません”としてチェック結果格納部140に登録する。図6(b)の符号aに示すAPI名の候補は「userManagement」と、図6(b)の符号bに示す「articleManagement」と、図6(b)の符号cに示す「*Management」とがある。上記リソース名のAPI名の候補の抽出において、正規表現の使用も可とし、例えば図6(b)の符号cでは「*」(ワイルドカード)による部分一致定義を行っている。
また、API名チェック部132は、API名定義ルールファイル124のstyleを参照し、抽出したAPI名が表記規約に沿っているかをチェックする。抽出したAPI名が表記規約に沿っていなければ警告“API名の表記規約がルールに従っていません”としてチェック結果格納部140に登録する。
図6(b)に示すように、類義語定義ルールファイル122には、
user:
candidates:
- name: customer
recommended: true
- name: client
recommended: true
が定義されている。
API名チェック部132は、図6(b)に示す類義語定義ルールファイル122を参照し、抽出したAPI名に該当単語が含まれていた場合、他の単語候補と共に注意事項としてチェック結果格納部140に登録する。ただし、recommendedがtrueのもののみとする。また、該当単語を候補単語に変換した結果、API名の候補に完全一致するものがあれば、その候補単語のみ登録する。
図6(b)の符号eに示すように、該当単語は「user」、図6(b)の符号fに示すように、候補単語は「customer」である。該当単語「user」と候補単語「customer」とは、類似している単語である。
API名チェック部132は、図6(b)の符号gに示すように、レコメンドに含めるかどうかをチェックする。例えば、学習機能により、”userはすべてcustomerに変換する”とした場合、他の候補単語(client等)のrecommendedはfalseにする。
[リソース名のチェック]
次に、図7を参照してリソース名のチェックについて説明する。
図7は、リソース名チェック部133のリソース名チェックの詳細を説明する図であり、図7(a)は、API仕様書1の一例を示す図、図7(b)は、ルールファイル格納部120(図1参照)のルールファイルのうち、リソース定義ルールファイル125と類義語定義ルールファイル122の一例を示す図である。
図7(a)に示すAPI仕様書1は、
host: api.sample.com
basePath: /userManagement/v1
paths:
/users:
/articles:
であり、API名は、
userManagement
である。なお、上述した図5および図6のAPI仕様書1とAPI名が異なっている。
API仕様書アダプタ部110(図1参照)により、API仕様書1(図1参照)から、リソース名が抽出されていることを前提とする。
リソース名チェック部133(図1参照)は、リソース定義ルールファイル125のpathsを取得し、リソース名の候補に該当するものがあるかチェックする。リソース名の候補に該当するものがなければ、警告“リソース名が規約に沿っていません”としてチェック結果格納部140に登録する。図7(b)の符号hに示すリソース名の候補「users」と、図7(b)の符号iに示すリソース名の候補「articles」とがチェックされている。
図7(b)に示すように、類義語定義ルールファイル122には、
user:
candidates:
- name: customer
recommended: true
- name: client
recommended: true
が定義されている。
API名チェック部132は、図7(b)に示す類義語定義ルールファイル122を参照し、抽出したリソース名に該当単語が含まれていた場合、他の単語候補と共に注意事項としてチェック結果格納部140に登録する。ただし、recommendedがtrueのもののみとする。また、該当単語を候補単語に変換した結果、リソース名の候補に完全一致するものがあれば、その候補単語のみ登録する。
[リソース名の単数形/複数形規約チェック]
次に、図8を参照してリソース名の単数形/複数形規約チェックについて説明する。
図8は、リソース名チェック部133のリソース名チェックの詳細を説明する図であり、図8(a)は、API仕様書1の一例を示す図、図8(b)は、ルールファイル格納部120(図1参照)のルールファイルのチェック対象定義ルールファイル121の一例を示す図である。
図8(a)に示すAPI仕様書1からリソース名が抽出されていることを前提とする。
図8(a)に示すAPI仕様書1は、
paths:
/users:
get:
parameters:
- name: id
in: query
required: true
type: number
format: string
responses:
200:
description: ユーザのリスト
schema:
type: array
items:
$ref: ‘#/definitions/User’
である。
図8(b)に示すチェック対象定義ルールファイル121は、
checkTargets:
- URI
- apiName
- resourceName:
singularPluralPolicy: “pluralIfArray”
- parameterName:
singularPluralPolicy: “pluralIfArray”
- apiName-resourceName
- resourceName-parameterName
- maxHierarchy: 2
を定義する。
リソース名チェック部133(図1参照)は、図8(b)に示すチェック対象定義ルールファイル121を参照し、resourceName: singularPluralPolicy = “singular”が設定されている場合、抽出したリソース名が単数形でないとき、警告をチェック結果格納部140に格納する。この警告は、例えば“リソース名が単数形/複数形規約に沿っていません”である。また、resourceName: singularPluralPolicy = “plural”が設定されている場合、抽出したリソース名が複数形でないとき、警告する。この警告は、例えば“リソース名が単数形/複数形規約に沿っていません”である。
また、resourceName: singularPluralPolicy = “pluralIfArray”が設定されている場合は、下記(1)(2)である。
(1)API仕様書アダプタ部110(図1参照)により、図8(a)に示すAPI仕様書1からリソースのレスポンスがリストかそうでないかが取得されていることを前提とする。リソース名チェック部133(図1参照)はAPI仕様書アダプタ部110(図1参照)より、対象リソースの「リストフラグ」を取得する。
(2)上記(1)においてリストフラグがtrueの場合、リソース名が複数形でなければ警告し、リストフラグがfalseの場合、リソース名が単数形でなければ警告する。
なお、本リソース名の単数形/複数形規約チェック機能は、ルールファイルのうち、リソース定義ルールファイル125に対しても適用することができる。
[API名とリソース名の対応チェック]
次に、図9を参照してAPI名とリソース名の対応チェックについて説明する。
図9は、リソース名チェック部133のリソース名チェックの詳細を説明する図であり、図9(a)は、API仕様書1の一例を示す図、図9(b)は、ルールファイル格納部120(図1参照)のルールファイルのうち、リソース定義ルールファイル125と類義語定義ルールファイル122の一例を示す図である。
図9(a)に示すAPI仕様書1からAPI名とリソース名が抽出されていることを前提とする。例えば、図9(a)では、API名はcustomerManagementであり、対応するリソース名はusersおよびarticlesである。
図9(a)に示すAPI仕様書1は、
host: api.sample.com
basePath: /customerManagement/v1
paths:
/users:
/articles:
である。
なお、上述した図5、図6および図7のAPI仕様書1とAPI名が異なっている。
図9(b)に示すAPI名定義ルールファイル124は、
apiName:
names:
- userManagement:
description: ユーザ管理API
resources:
- User
- articleManagement
description: 記事管理API
resources: Article
- /*Management/
style: camelCase
を定義する。
API名−リソース名対応チェック部135は、図9(b)に示すAPI名定義ルールファイル124を参照して抽出したリソース名がAPI名の候補に該当するかチェックする。ここでは、API名−リソース名対応チェック部135は、API名定義ルールファイル124のapiName.names.{API名}.resourcesを参照し、抽出したリソース名がAPI名の候補に該当するかチェックする。該当するものがなければ、警告”API名とリソース名の対応がルールに従っていません”として登録する。なお、上記リソース名がAPI名の候補の抽出では、後記図9(b)に示す類義語定義ルールファイル122を参照して、API名の候補に類義語定義されたAPI名の候補を含めるようにする。
図9(b)の例では、
図9(b)の符号jに示すAPI名の候補
- userManagement:
description: ユーザ管理API
resources:
と、図9(b)の符号kに示すAPI名の候補
- articleManagement
description: 記事管理API
resources: Article
を抽出する。
図9(b)の符号lに示すように、上記リソース名のAPI名の候補の抽出において、正規表現による部分一致定義も可とする。
図9(b)に示すように、類義語定義ルールファイル122には、
user:
candidates:
- name: customer
recommended: true
- name: client
recommended: true
が定義されている。
また、API名−リソース名対応チェック部135は、図9(b)に示す類義語定義ルールファイル122を参照して、抽出したリソース名に該当単語が含まれていた場合、他の単語候補と共に注意事項として登録する。ただし、recommendedがtrueのもののみとする。また、該当API名の候補を候補単語に変換した結果、リソース名がAPI名の候補に完全一致するものがあれば、その候補単語のみ登録する。
[パラメータ名のチェックの対応チェック]
次に、図10を参照してパラメータ名のチェックについて説明する。
図10は、パラメータ名チェック部134のパラメータ名のチェックの詳細を説明する図であり、図10(a)は、API仕様書1の一例を示す図、図10(b)は、ルールファイル格納部120(図1参照)のルールファイルのうち、リソース定義ルールファイル125と類義語定義ルールファイル122とスキーマ定義ルールファイル126との一例を示す図である。
API仕様書アダプタ部110(図1参照)により、API仕様書1(図1参照)からパラメータ名が抽出されていることを前提とする。
図10(a)に示すAPI仕様書1は、API仕様書1(1a)とAPI仕様書1(1b)である。
図10(a)に示すAPI仕様書1において、パラメータ名(リクエスト/レスポンスのパラメータ名)は、
API仕様書1(1a)では、
id
であり、
API仕様書1(1b)では、
idとname
である。
パラメータ名チェック部134(図1参照)は、図10(b)に示すリソース定義ルールファイル125およびスキーマ定義ルールファイル126を参照し、抽出したパラメータ名がパラメータ名の候補に該当するか否かをチェックする。抽出したパラメータ名がパラメータ名の候補に該当しない場合、警告“パラメータ名が規約に沿っていません”としてチェック結果格納部140に登録する。
図10(b)の例では、リソース定義ルールファイル125から、図10(b)の符号mに示すパラメータ名の候補「id」を抽出する。このidは、インプットパラメータである。
また、スキーマ定義ルールファイル126から、図10(b)の符号oに示すパラメータ名の候補「id」と図10(b)の符号nに示す「name」を抽出する。
パラメータ名チェック部134(図1参照)は、図10(b)に示す類義語定義ルールファイル122を参照し、抽出したパラメータ名に該当単語が含まれていた場合、他の単語候補と共に注意事項としてチェック結果格納部140に登録する。ただし、この注意事項の登録は、recommendedがtrueのもののみとする。また、該当単語を候補単語に変換した結果、パラメータ名の候補に完全一致するものがあれば、その候補単語のみ登録する。
[パラメータ名の単数形/複数形規約チェック]
次に、図11を参照してパラメータ名の単数形/複数形規約チェックについて説明する。
図11は、パラメータ名チェック部134の単数形/複数形規約チェックの詳細を説明する図であり、図11(a)は、API仕様書1の一例を示す図、図11(b)は、ルールファイル格納部120(図1参照)のルールファイルのうち、チェック対象定義ルールファイル121の一例を示す図である。
API仕様書アダプタ部110(図1参照)により、API仕様書1(図1参照)からパラメータ名が抽出されていることを前提とする。
図11(a)に示すAPI仕様書1は、API仕様書1(1a)とAPI仕様書1(1b)である。
図11(a)に示すAPI仕様書1において、パラメータ名(リクエスト/レスポンスのパラメータ名)は、
API仕様書1(1a)では、パラメータ名
id
であり、
API仕様書1(1b)では、パラメータ名
idとname
である。
パラメータ名チェック部134(図1参照)は、図11(b)に示すチェック対象定義ルールファイル121を参照し、抽出したパラメータ名の単数形/複数形規約チェックを行う。この例では、図11(b)に示すチェック対象定義ルールファイル121に、
- parameterName:
singularPluralPolicy: “pluralIfArray”
が設定されている。パラメータ名チェック部134は、パラメータ名が単数形/複数形規約に沿っているか下記の判定を行う。
図11(b)に示すチェック対象定義ルールファイル121に、parameterName: singularPluralPolicy = “singular”が設定されている場合、抽出したリソース名が複数形でない場合、“パラメータ名が単数形/複数形規約に沿っていません”を警告する。
図11(b)に示すチェック対象定義ルールファイル121に、parameterName: singularPluralPolicy = “plural”が設定されている場合、抽出したリソース名が複数形でない場合、“パラメータ名が単数形/複数形規約に沿っていません”を警告する。
図11(b)に示すチェック対象定義ルールファイル121に、parameterName: singularPluralPolicy = “pluralIfArray”が設定されている場合、下記(1)(2)である。
(1)API仕様書アダプタ部110(図1参照)より、パラメータがリストかそうでないかを取得するため、対象パラメータの「リストフラグ」値を取得する。
(2)上記フラグがtrueの場合は、パラメータ名が複数形でなければ警告し、falseの場合は、パラメータ名が単数形でなければ警告する。
なお、本パラメータ名の単数形/複数形規約チェック機能は、リソース定義ルールファイル125およびスキーマ定義ルールファイル126に対しても適用することができる。
[リソース名とパラメータ名の対応チェック]
次に、図12を参照してリソース名とパラメータ名の対応チェックについて説明する。
図12は、リソース名−パラメータ名対応チェック部136のリソース名とパラメータ名の対応チェックの詳細を説明する図であり、図12(a)は、API仕様書1の一例を示す図、図12(b)は、リソース名−パラメータ名対応チェック部136(図1参照)のルールファイルのうち、リソース定義ルールファイル125およびスキーマ定義ルールファイル126の一例を示す図である。
API仕様書アダプタ部110(図1参照)により、API仕様書1(図1参照)からリソース名が抽出されていることを前提とする。
図12(a)に示すAPI仕様書1は、API仕様書1(1a)とAPI仕様書1(1b)である。
図12(a)に示すAPI仕様書1において、リソース名は、usersであり、パラメータ名(リクエスト/レスポンスのパラメータ名)は、
API仕様書1(1a)では、
id
であり、
API仕様書1(1b)では、
idとname
である。
図12(b)の例では、
リソース定義ルールファイル125から、図12(b)の符号pに示すパラメータ名の候補「id」を抽出する。
また、スキーマ定義ルールファイル126から、図12(b)の符号rに示すパラメータ名の候補「id」と図12(b)の符号qに示す「name」を抽出する。
リソース名−パラメータ名対応チェック部136は、リソース定義ルールファイル125およびスキーマ定義ルールファイル126を参照し、抽出したパラメータ名がパラメータ名の候補に該当するかチェックする。抽出したパラメータ名がパラメータ名の候補に該当しない場合、警告“リソース名とパラメータ名の対応が規約に沿っていません” としてチェック結果格納部140に登録する。
[リソース名の階層数チェック]
次に、図13を参照してリソース名の階層数チェックについて説明する。
図13は、リソース階層数チェック部137におけるリソース名の階層数チェックの詳細を説明する図であり、図13(a)は、API仕様書1の一例を示す図、図13(b)は、ルールファイル格納部120(図1参照)のルールファイルのチェック対象定義ルールファイル121の一例を示す図である。
API仕様書アダプタ部110(図1参照)により、API仕様書1(図1参照)からリソース名が抽出されていることを前提とする。
図13(a)に示すAPI仕様書1において、リソース名は、
users
および
articles
である。
リソース階層数チェック部137(図1参照)は、図13(b)に示すチェック対象定義ルールファイル121を参照して、図13(a)に示すAPI仕様書1から、規定以上の階層になっている箇所を見つける。具体的には、API仕様書アダプタ部110(図1参照)より、各リソースに対する「階層数」を取得し、これが図13(b)に示すチェック対象定義ルールファイル121で定義される、規約としての階層の数より多かったら規約違反とする。例えば、図13(b)に示すチェック対象定義ルールファイル121では、maxHierarchy: 1(リソース階層数:1)が定義されている。しかしながら、上記図13(a)の符号sの記述では、/users/{id}/articlesとなっており、「articles」は2階層目に存在するため、規約違反となる。このようにして、リソース階層数チェック部137は、リソース階層数が規定以上の階層になっている箇所を見つけることができる。
リソース階層数チェック部137は、図13(b)に示すチェック対象定義ルールファイル121を参照し、チェック対象定義ルールファイル121に、maxHierarchyが設定されている場合、以下の処理を実行する。
(1)リソース階層数チェック部137は、API仕様書アダプタ部110(図1参照)より取得した階層の数がmaxHierarchyの値より大きい場合、“階層の数が規約に反しています”を警告する。
なお、本リソース名の階層数チェック機能は、ルールファイルのうち、リソース定義ルールファイル125に対しても適用することができる。
[階層数変更提案]
上述したように、上記図13(a)に示すリソース定義ルールファイル125および図13(b)に示すスキーマ定義ルールファイル126には、リソース名に階層の数ポリシーに反する部分が含まれている。
そこで上述したリソース名の階層数チェック(図13参照)において、リソース階層数チェック部137(図1参照)が、リソース名に階層の数ポリシーに反する部分を検出した場合、下記の手順で低階層化の提案を行うことができる。また、高階層化は、これとは逆の手順となる。
低階層化または高階層化の提案対象は、API仕様書とリソース定義ルールファイル125との両方に対して適用可能である。
図14および図15を参照して階層数変更提案について説明する。
図14は、リソース階層数チェック部137の階層数変更提案の詳細を説明する図である。図14(a)は、リソース名に階層の数ポリシーに反する部分を有するリソース定義ルールファイル125を示す図であり、図14(b)は、リソース名に階層の数ポリシーに反する部分を有するスキーマ定義ルールファイル126を示す図である。
図14(b)に示すスキーマ定義ルールファイル126は、
definitions:
User:
type: object
properties:
id:
type: string
description: ユーザを識別するためのID
name:
type: string
description: ユーザ名
Article:
type: object
properties:
id:
type: string
description: 記事ID
title:
type: string
description: 記事のタイトル
を定義する。
リソース階層数チェック部137(図1参照)は、前述の手順で規定以上の階層になっている箇所を見つける。
リソース階層数チェック部137は、下記の手順で低階層化の提案を行う。
なお、以下の手順では、リソース階層数チェック部137がAPI仕様書アダプタ部110(図1参照)に指示を出し、実際にAPI仕様書を記述するのはAPI仕様書アダプタ部110(図1参照)になる。
図15は、図14を低階層化する場合の、リソース階層数チェック部137の階層数変更提案の詳細を説明する図である。図15(a)は、低階層化されたリソース定義ルールファイル125を示す図であり、図15(b)は、低階層化されたスキーマ定義ルールファイル126を示す図である。
図15(a)に示す低階層化されたリソース定義ルールファイル125は、
paths:
/users:
get:
parameters:
- name: id
in: query
required: true
type: number
format: string
responses:
200:
description: ユーザのリスト
schema:
type: array
items:
$ref: ‘#/definitions/User’

/articles:
get:
parameters:
- name: id
in: query
required: true
type: number
format: string
- name: userId
in: query
required: true
type: number
format: string
responses:
200:
description: 記事のリスト
schema:
type: array
items:
$ref: ‘#/definitions/Article’
を定義する。
図15(b)に示す低階層化されたスキーマ定義ルールファイル126は、
definitions:
User:
type: object
properties:
id:
type: string
description: ユーザを識別するためのID
name:
type: string
description: ユーザ名
Article:
type: object
properties:
id:
type: string
description: 記事ID
title:
type: string
description: 記事のタイトル
userId:
type: string
(description: 記事に紐づくユーザID)
を定義する。
API仕様書アダプタ部110(図1参照)は、図15(a)の符号uに示すように、規定以上の階層になっている「/users/{id}/articles」(図14(a)参照)のうち、最終階層「articles」だけを残す記述とする。そして、図15(a)の符号vに示すように、リソース階層数変更前のリソース定義ルールファイル125から“{削除した階層(user)}Id” をリクエストパラメータに追加する。すなわち、図15(a)の符号vに示すように、“{削除した階層(user)}Id”の、
- name: userId
in: query
required: true
type: number
format: string
をリクエストパラメータに追加する。
これに伴い、API仕様書アダプタ部110(図1参照)は、図15(b)の符号wに示すように、上記“{削除した階層(user)}Id” を最終階層(article)のスキーマに追加する。すなわち、図15(b)の符号wに示すように、リソース階層数チェック部137は、スキーマ定義ルールファイル126の最終階層(article)のスキーマに、
userId:
type: string
を追加する。
以上により、図14に示すリソース定義ルールファイル125およびスキーマ定義ルールファイル126は、低層化され、図15に示す低層化されたリソース定義ルールファイル125およびスキーマ定義ルールファイル126が得られる。
以上説明したように、本実施形態のAPI規約チェック装置100(図1参照)は、API仕様書1およびAPI規約の入力を受け付け、API仕様書1から所定の要求項目を取得するAPI仕様書アダプタ部110と、APIに特有のURL、API名、当該API名で扱うリソース名、およびパラメータ名の相互の関係をルールとして記述するルールファイルを格納するルールファイル格納部120と、ルールファイルを参照して、要求項目に対してAPI規定に合わない箇所をチェックするチェック実行部130と、チェック実行部130によるチェック結果として、(1)警告と(2)注意とに分けて該当箇所と内容を登録するチェック結果格納部140と、チェック結果格納部140のチェック結果を元に、API設計者に対してアウトプットを行う結果出力部150と、を備える。
本実施形態では、ルールファイル格納部120は、ルールファイルとして、チェック対象となる項目を指定するチェック対象定義ルールファイル121、API名、リソース名、パラメータ名提案に用いる類義語を定義する類義語定義ルールファイル122、ホスト名、API名、バージョン名の順番および有無を定義するURI構成定義ルールファイル123、API名の候補/命名ルール、および該当API名で扱うリソース名を定義するAPI名定義ルールファイル124、リソース名の候補および、該当リソースに関する操作一覧とインプット、アウトプットを規定するリソース定義ルールファイル125、リソース定義に用いるデータスキーマ詳細を規定するスキーマ定義ルールファイル126のうち、少なくともいずれか1つを含む。
本実施形態では、前記チェック実行部130は、URI構成のチェックを行うURI構成チェック部131、API名のチェックを行うAPI名チェック部132、リソース名のチェックを行うとともに、リソース名の単数形/複数形規約をチェックするリソース名チェック部133、パラメータ名のチェックを行うパラメータ名チェック部134、API名とリソース名の対応チェックを行うAPI名−リソース名対応チェック部135、リソース名とパラメータ名の対応チェックを行うリソース名−パラメータ名対応チェック部136、リソース階層の数をチェックするリソース階層数チェック部137のうち、少なくともいずれか1つを備える。
そして、API規約チェック装置100のAPI規約チェック方法では、API仕様書1およびAPI規約を入力し、API仕様書1から所定の要求項目を取得するステップと、APIに特有のURL、API名、当該API名で扱うリソース名、およびパラメータ名の相互の関係をルールとして記述するルールファイルを格納するステップと、前記ルールファイルを参照して、前記要求項目に対してAPI規定に沿わない可能性がある箇所をチェックするステップと、を実行する。
本実施形態のAPI規約チェック装置100およびAPI規約チェック方法により、以下の作用効果を得ることができる。
図1において、API統制者は、ルールファイル格納部120のルールファイルを予めインプットしておく。ルールファイル格納部120は、ルールファイルの定義を標準API仕様書のフォーマットに合わせることが好ましい。
API設計者がAPI仕様書1(例えば、swagger形式で記述されている)を入力すると、チェック実行部130(図1参照)は、ルールファイル格納部120のルールファイルを参照して、API規定に沿わない可能性がある箇所をチェックする。チェック結果格納部140は、チェック結果を格納し、結果出力部150は、チェック結果を元に、API設計者に対してアウトプットを行う。アウトプット形式は、例えばリアルタイムなエディタ上への補完やポップアップである。
これにより、APIに特有のURL、リソース名、パラメータ名の相互の関係(相互依存性)を加味することで、それらの組合せによるAPI規約の定義とチェックが可能になる。すなわち、API仕様書およびAPI規約を入力として、設計したAPIが規約に沿っているかをチェックできる。特に、単にAPI名・リソース名・パラメータ名等を辞書と比較するだけでなく、複数の項目に影響するルールの作成とチェックが可能になる。このため、API設計者およびAPI統制者によるAPI規約のチェックが大幅に簡易化される。
また、”パラメータ名だけ”など、一部のみでなく、API設計時に必要になる様々なレベル(URIないしパラメータ名)の規約に対応することができる。
また、APIに特有のURL、リソース名、パラメータ名の相互依存性を理解することで、精度の高いAPI規約の定義とチェックが可能になる。
また、API規約が変わった場合でも、上記ルールファイルを更新するだけで自動チェックが可能になる。
また、API規約(またはルールファイル)自体のチェック機能により、API規約作成者の作業も簡易化させることができる。
本実施形態では、ルールファイル格納部120は、ルールファイルの定義を標準API仕様書のフォーマットに合わせることで、同じロジックを用いて、標準API仕様書をもとにAPI規約を定義するルールファイル自体のチェックも可能となる。これにより、ルールファイルをインプットするAPI統制者の稼働を削減することができ、API規約の精度向上につながる。
また、API規約が変わった場合でも、上記ルールファイルを更新するだけで自動チェックが可能になる。また、一部の規約チェック機能はルールファイルに対しても適用できるため、API規約作成自体もサポートが可能になる。
本実施形態では、チェック実行部130は、レスポンスの型とリソース名の関係、および前記レスポンスの型と前記リソース名が単数形または複数形であることのチェックを行うことで、表層の名前合わせだけでなく、レスポンスの型とリソース名の関係、単数形または複数形を相互の関係のルールとしてその記述をチェックでき、またバージョン管理することができる。その結果、API設計の精度向上を図ることができる。
本実施形態では、チェック実行部130は、API規約としてURIの階層の数を制限する場合、当該制限により影響があるリソースの構造と前記パラメータ名のチェックを行うことで、URIの階層の数の制限で影響があるリソースの構造とパラメータ名についてものチェックを行うことができるとともに、リソース階層の数を変更した場合であってもリソースの構造とパラメータ名のチェックすることができる。
また、上記実施形態において説明した各処理のうち、自動的に行われるものとして説明した処理の全部または一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部または一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中に示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
また、上記の各構成、機能、処理部、処理手段等は、それらの一部または全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行するためのソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、IC(Integrated Circuit)カード、SD(Secure Digital)カード、光ディスク等の記録媒体に保持することができる。また、本明細書において、時系列的な処理を記述する処理ステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理(例えば、並列処理あるいはオブジェクトによる処理)をも含むものである。
100 API規約チェック装置
110 API仕様書アダプタ部(API仕様書アダプタ手段)
120 ルールファイル格納部(ルールファイル格納手段)
121 チェック対象定義ルールファイル
122 類義語定義ルールファイル
123 URI構成定義ルールファイル
124 API名定義ルールファイル
125 リソース定義ルールファイル
126 スキーマ定義ルールファイル
130 チェック実行部(チェック実行手段)
131 URI構成チェック部
132 API名チェック部
133 リソース名チェック部
134 パラメータ名チェック部
135 API名−リソース名対応チェック部
136 リソース名−パラメータ名対応チェック部
137 リソース階層数チェック部

Claims (8)

  1. 設計したAPI(Application Program Interface)がAPI規約に沿っているかをチェックするAPI規約チェック装置であって、
    API仕様書および前記API規約の入力を受け付け、前記API仕様書から所定の要求項目を取得するAPI仕様書アダプタ部と、
    APIに特有のURL(Uniform Resource Locator)、API名、当該API名で扱うリソース名、およびパラメータ名の相互の関係をルールとして記述するルールファイルを格納するルールファイル格納部と、
    前記ルールファイルを参照して、前記要求項目に対してAPI規定に合わない箇所を検出するチェック実行部と、を備える
    ことを特徴とするAPI規約チェック装置。
  2. 前記ルールファイル格納部は、前記ルールファイルとして、
    チェック対象となる項目を指定するチェック対象定義ルールファイル、
    API名、リソース名、パラメータ名に用いる類義語を定義する類義語定義ルールファイル、
    ホスト名、API名、バージョン名の順番および有無を定義するURI(Uniform Resource Identifier)構成定義ルールファイル、
    API名の候補および/または命名ルール、並びに前記API名で扱うリソース名を定義するAPI名定義ルールファイル、
    リソース名の候補および、前記リソース名のリソースに関する操作一覧とインプット、アウトプットとを規定するリソース定義ルールファイル、
    リソース定義に用いるデータスキーマを規定するスキーマ定義ルールファイルのうち、少なくともいずれか1つを含む
    ことを特徴とする請求項1に記載のAPI規約チェック装置。
  3. 前記ルールファイル格納部は、
    前記ルールファイルの定義を標準API仕様書のフォーマットに合わせる
    ことを特徴とする請求項1または請求項2に記載のAPI規約チェック装置。
  4. 前記チェック実行部は、
    レスポンスの型とリソース名の関係、および前記レスポンスの型と前記リソース名が、単数形または複数形であることのチェックを行う
    ことを特徴とする請求項1に記載のAPI規約チェック装置。
  5. 前記チェック実行部は、
    前記API規約としてURIの階層の数が制限される場合、当該制限により影響があるリソースの構造と前記パラメータ名のチェックを行う
    ことを特徴とする請求項1に記載のAPI規約チェック装置。
  6. 前記チェック実行部は、
    URI構成のチェックを行うURI構成チェック部、
    前記API名のチェックを行うAPI名チェック部、
    前記リソース名のチェックを行うとともに、前記リソース名の単数形および/または複数形規約をチェックするリソース名チェック部、
    前記パラメータ名のチェックを行うパラメータ名チェック部、
    前記API名と前記リソース名との対応チェックを行うAPI名−リソース名対応チェック部、
    前記リソース名と前記パラメータ名との対応チェックを行うリソース名−パラメータ名対応チェック部、
    リソース階層の数をチェックするリソース階層数チェック部のうち、少なくともいずれか1つを備える
    ことを特徴とする請求項1に記載のAPI規約チェック装置。
  7. 設計したAPI(Application Program Interface)がAPI規約に沿っているかをチェックするAPI規約チェック装置が、
    API仕様書および前記API規約の入力を受け付け、前記API仕様書から所定の要求項目を取得するステップと、
    APIに特有のURL、API名、当該API名で扱うリソース名、およびパラメータ名の相互の関係をルールとして記述するルールファイルを格納するステップと、
    前記ルールファイルを参照して、前記要求項目に対してAPI規定に合わない箇所を検出するステップと、を実行する
    ことを特徴とするAPI規約チェック方法。
  8. 設計したAPI(Application Program Interface)がAPI規約に沿っているかをチェックするAPI規約チェック装置としてのコンピュータを、
    API仕様書および前記API規約の入力を受け付け、前記API仕様書から所定の要求項目を取得するAPI仕様書アダプタ手段、
    APIに特有のURL、API名、当該API名で扱うリソース名、およびパラメータ名の相互の関係をルールとして記述するルールファイルを格納するルールファイル格納手段、
    前記ルールファイルを参照して、前記要求項目に対してAPI規定に合わない箇所を検出するチェック実行手段、として機能させるためのプログラム。
JP2017037507A 2017-02-28 2017-02-28 Api規約チェック装置、api規約チェック方法、およびプログラム Pending JP2018142271A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017037507A JP2018142271A (ja) 2017-02-28 2017-02-28 Api規約チェック装置、api規約チェック方法、およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017037507A JP2018142271A (ja) 2017-02-28 2017-02-28 Api規約チェック装置、api規約チェック方法、およびプログラム

Publications (1)

Publication Number Publication Date
JP2018142271A true JP2018142271A (ja) 2018-09-13

Family

ID=63526665

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017037507A Pending JP2018142271A (ja) 2017-02-28 2017-02-28 Api規約チェック装置、api規約チェック方法、およびプログラム

Country Status (1)

Country Link
JP (1) JP2018142271A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020077304A (ja) * 2018-11-09 2020-05-21 富士通株式会社 認証装置、認証方法および認証プログラム
WO2020158374A1 (ja) * 2019-01-29 2020-08-06 日本電信電話株式会社 準拠性判定装置及びその方法
WO2021152803A1 (ja) 2020-01-30 2021-08-05 富士通株式会社 入力支援装置、入力支援方法および入力支援プログラム

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2020077304A (ja) * 2018-11-09 2020-05-21 富士通株式会社 認証装置、認証方法および認証プログラム
JP7091998B2 (ja) 2018-11-09 2022-06-28 富士通株式会社 認証装置、認証方法および認証プログラム
WO2020158374A1 (ja) * 2019-01-29 2020-08-06 日本電信電話株式会社 準拠性判定装置及びその方法
JP2020122999A (ja) * 2019-01-29 2020-08-13 日本電信電話株式会社 準拠性判定装置及びその方法
JP7111972B2 (ja) 2019-01-29 2022-08-03 日本電信電話株式会社 準拠性判定装置及びその方法
WO2021152803A1 (ja) 2020-01-30 2021-08-05 富士通株式会社 入力支援装置、入力支援方法および入力支援プログラム

Similar Documents

Publication Publication Date Title
EP3514694B1 (en) Query translation
US9792284B2 (en) System, method and computer program product for multilingual content management
US20230244465A1 (en) Systems and methods for automated retrofitting of customized code objects
US7774300B2 (en) System and method for data model and content migration in content management applications
US20170337052A1 (en) Interface description language for application programming interfaces
US11200214B2 (en) Construction and application of data cleaning templates
US20100312592A1 (en) Confirming enforcement of business rules specified in a data access tier of a multi-tier application
US20200394036A1 (en) Method and system for integrating a development environment repository with a version control tool
JP2018142271A (ja) Api規約チェック装置、api規約チェック方法、およびプログラム
US20120173501A1 (en) Configurable catalog builder system
Corcho et al. A high-level ontology network for ICT infrastructures
Sánchez-Rada et al. Senpy: A pragmatic linked sentiment analysis framework
CN103559296A (zh) 一种基于xml的scpi命令解析方法
JP7131119B2 (ja) ソースアプリケーションからのソースデータをターゲットアプリケーションのターゲットデータへとマージするためのシステムおよび方法
JP7230349B2 (ja) 設計データ分析のためのシステムおよび方法
CN117897710A (zh) 解决工业数据转换问题的人工智能方法
Settle et al. aMatReader: Importing adjacency matrices via Cytoscape Automation
EP3999917B1 (en) Method and system for generating a digital representation of asset information in a cloud computing environment
US11068468B2 (en) Extensible validation framework
Schroeder et al. Flexible automatic converting of NC programs. A cross-compiler for structured text
Ellison et al. Towards Platform Independent Database Modelling in Enterprise Systems
JP2005228234A (ja) サービス情報生成方法及び実施システム並びに処理プログラム
Kubik Role of thesauri in the information management in the web-based services and systems
Rouquette Simplifying OMG MOF-based metamodeling
WO2022107228A1 (ja) 操作支援装置、操作支援方法および操作支援プログラム