SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事(AD)

CodeIQへのサムライズム山本裕介氏からの出題「APIの関連用語知識チェック!」~解答編

  • このエントリーをはてなブックマークに追加

 1月末から2月にかけて、解答することでエンジニアのスキルチェックができるサービス「CodeIQ」様との共同企画として、元Twitter Japan、株式会社サムライズム 山本裕介氏からの問題を出題させていただきました。Web APIに関する基礎知識を問う問題はいかがでしたでしょうか。今回、その出題内容と解答をおさらいしてみたいと思います(編集部)。

  • このエントリーをはてなブックマークに追加

出題の背景

 昨年末、CodeIQで何か出題してみないかとの提案をいただきました。実をいうとどんな問題にするか非常に悩みました。エンタープライズ系のソフトウェアベンダに長年勤めていたり、Twitter4JというTwitter APIのラッパーを作ったりとJavaやTwitter APIが得意な私ですが、画期的な技術を積み重ねてプログラムをしていくタイプではなく、淡々と着実に平易なプログラムを積み重ねていくタイプです。なのでCodeIQでよく見られる何らかの問題を特定のアルゴリズムを使って解くというのは得意ではありません。それではアルゴリズム系の問題ではなく自分の得意な土俵、API関連で出題をしてみようということになり、知識チェックを選択形式で行える問題にした次第です。

対象読者

 今回はAPIを活用しているエンジニア、またはこれからAPIを使ってみたいエンジニアを対象としています。APIという言葉の指す範囲は広いですが、中でもWeb APIやREST APIについての出題となります。

 選択式の知識チェックですので知っていれば簡単に解け、知らなければ悩んでも分からないという性質の問題になります。また最新のAPI回りの知識だけでなく、現在のAPIの作法が形成されるまでに至った経緯・歴史も含めていますので最新技術を活用していても必ずしも解けるというわけではありません。

問題

 設問は以下の通りです。[Q1]から[Q7]に当てはまる言葉を最下部の選択肢から選び、穴埋めをしてください。

・APIと分散コンピューティング

 

 APIはアプリケーションの結合部の仕様を表し、最近は特にWeb(HTTP)を通して分散コンピューティングを実現するための技術を示す。中でもエンタープライズ系システムを中心に普及・発展したのがOMGの定める[Q1]やW3Cの定める[Q2]だ。

 

[Q2]とSOA

 

 [Q2]はインターフェースの定義([Q3])からメッセージのフォーマット(SOAP)、サービスを探し出すためのレジストリ(UDDI)まで徹底して[Q4]を活用しているのが特徴だ。HTTPのみならずSMTPやftpなど様々なプロトコルを使って呼び出しが出来ることや、「サービス」として独立させたコンポーネントを疎に結合させてシステムをくみ上げるSOAという概念も話題になった。

 

[Q3]からの脱却

 

 XML-RPCはSOAPの基盤となった[Q4]ベースのRPC技術だが、BloggerやMovableType、WordPressなど様々なブログプラットフォームが対応したことで知名度をあげた。通信プロトコルをHTTP(S)に限定しており、また仕様がシンプルで扱いやすくデベロッパの支持を得たことで広く普及した。

 

[Q5]

 

 最近は[Q4]の冗長性が嫌われ、メッセージのフォーマットとしてよりシンプルで柔軟性の高い[Q5]フォーマットがより好んで利用される。

 [Q5]フォーマットを使ったAPIとして特にデベロッパの支持を得たのがTwitter APIで、そのAPIのデザインパターンは現在多くのサービスで参考にされている。

 

・APIの認証

 

 成りすましやサービスの妨害などを防ぐため、特に更新系のAPIでは認証や認可を必要とするものが多い。シンプルな認証の実装方法としてユーザーIDとパスワードを渡す[Q6]認証があるが、サードパーティのアプリケーションにパスワードを渡すのはセキュリティ上好ましくない。近年はアプリケーション個別に発行したキーでユーザーを識別する[Q7]が普及している。[Q7]ではユーザーのパスワードを変更することなく任意のアプリケーションの接続を遮断することが可能だ。[Q7]は現行で二つの仕様、バージョン1.0aとバージョン2.0があるがそれぞれ互換性はない。

【選択肢】

Q1 CICS、VisiBroker、MQ、CORBA

Q2 Web Services、XML Schema、RELAX NG、ebXML

Q3 WADL、WSDL、ISBN、ISDN

Q4 WML、XML、WMV、RELAX NG

Q5 Bison、Python、JSON、Dyson

Q6 Basic、Advanced、SSL、クライアント証明書

Q7 SSL、OAuth、Authorization、Authentication

解答と解説

・APIと分散コンピューティング

 

 APIはアプリケーションの結合部の仕様を表し、最近は特にWeb(HTTP)を通して分散コンピューティングを実現するための技術を示す。中でもエンタープライズ系システムを中心に普及・発展したのがOMGの定める[Q1]やW3Cの定める[Q2]だ。

Q1
  • 選択肢: CICS、VisiBroker、MQ、CORBA
  • 答え: CORBA

 「CORBA」はCommon Object Request Broker Architectureの略で、プログラミング言語やOSによらずネットワークを通じてソフトウェアコンポーネントの呼び出しを実現できる仕様です。VisiBrokerはCORBAに準拠した製品の名前です。他にCORBA準拠の製品としてはORBIXが有名です。CICSはIBMのメインフレームのトランザクション処理システム、MQはIBMのメッセージングミドルウェアの製品名でどちらもAPIとは関係がありません。

 他に分散コンピューティングの仕様としては良くも悪くも有名なEJBがあります。EJBはJavaの仕様ですが、実はCORBAの仕様に基づいており、IIOPというプロトコルを使うことでCORBAのクライアントから呼び出すことも出来ます。

[Q2]とSOA

 

 [Q2]はインターフェースの定義([Q3])からメッセージのフォーマット(SOAP)、サービスを探し出すためのレジストリ(UDDI)まで徹底して[Q4]を活用しているのが特徴だ。HTTPのみならずSMTPやftpなど様々なプロトコルを使って呼び出しが出来ることや、「サービス」として独立させたコンポーネントを疎に結合させてシステムをくみ上げるSOAという概念も話題になった。

Q2
  • 選択肢: Web Services、XML Schema、RELAX NG、ebXML
  • 答え: Web Services(Webサービス)

 選択肢としてXML関連の技術を並べてみましたが、簡単だったのではないでしょうか。XML SchemaはXMLのスキーマ(構造)を定義する仕様で、Web Servicesのリクエスト・レスポンスの構造を表すのにも使います。RELAX NGはXML Schemaとはまた別のスキーマ仕様で、ebXMLはXMLを使った電子商取引のための仕様です。RELAX NGやebXMLはW3CではなくUN/CEFACTとOASISという機関が策定しています。

Q3
  • 選択肢: WADL、WSDL、ISBN、ISDN
  • 答え: WSDL

 答えはWSDL(読みは「ウィズドゥル」)です。WADL(読みは「ワドゥル」)はいわばREST API版のWSDLです。今のところ普及していませんが、REST APIのインターフェース仕様をより厳密に定義するためのインターフェース記述言語です。ISBNとISDNはどちらもAPIとは関係ない用語で、それぞれ書籍に割り振られる国際的なコードと電話回線を使ってデジタル通信を行う通信網を指します。

[Q3]からの脱却

 

 XML-RPCはSOAPの基盤となった[Q4]ベースのRPC技術だが、BloggerやMovableType、WordPressなど様々なブログプラットフォームが対応したことで知名度をあげた。通信プロトコルをHTTP(S)に限定しており、また仕様がシンプルで扱いやすくデベロッパの支持を得たことで広く普及した。

Q4
  • 選択肢: WML、XML、WMV、RELAX NG
  • 答え: XML

 自明な答えですね。WMLはWireless Markup Languageで携帯電話向けのコンテンツフォーマットです。日本ではEZwebで使われていましたがXHTMLやHTMLの普及に伴いほとんど使われなくなりました。WMVはWindows Media Videoで、ビデオのフォーマットです。

[Q5]

 

 最近は[Q4]の冗長性が嫌われ、メッセージのフォーマットとしてよりシンプルで柔軟性の高い[Q5]フォーマットがより好んで利用される。

 [Q5]フォーマットを使ったAPIとして特にデベロッパの支持を得たのがTwitter APIで、そのAPIのデザインパターンは現在多くのサービスで参考にされている。

Q5
  • 選択肢: Bison、Python、JSON、Dyson
  • 答え: JSON

 記述が簡単ということでAPIのメッセージ交換フォーマットとして今人気なのがJSONです。他の3つはAPIとは無関係です。Bisonはパーサジェネレータとして、Pythonは言語として、Dysonは掃除機メーカーとして有名です。

・APIの認証

 

 成りすましやサービスの妨害などを防ぐため、特に更新系のAPIでは認証や認可を必要とするものが多い。シンプルな認証の実装方法としてユーザーIDとパスワードを渡す[Q6]認証があるが、サードパーティのアプリケーションにパスワードを渡すのはセキュリティ上好ましくない。近年はアプリケーション個別に発行したキーでユーザーを識別する[Q7]が普及している。[Q7]ではユーザーのパスワードを変更することなく任意のアプリケーションの接続を遮断することが可能だ。[Q7]は現行で二つの仕様、バージョン1.0aとバージョン2.0があるがそれぞれ互換性はない。

Q6
  • 選択肢: Basic、Advanced、SSL、クライアント証明書
  • 答え: Basic

 ユーザID、パスワードを渡す「基本的」(Basic)な認証方式としてBasicがあります。Basic認証を使う際、ID、パスワードはBase64という方式でエンコードして送りますが、可逆変換なので通信内容を傍受された場合は簡単に元のID、パスワードを割り出すことが可能です。SSLはSecure Socket Layerの略で通信内容を暗号化する仕組みです。クライアント証明書はSSLで通信をする際、サーバ側だけでなくクライアント側の身分を明らかにするための仕組みで、法人向けのオンラインバンキングやe-Taxなどでも使われています。

Q7
  • 選択肢: SSL、OAuth、Authorization、Authentication
  • 答え: OAuth

 APIの認証方式として現在主流となりつつあるのがOAuthです。OAuthは厳密にはAPI呼び出し元の身分を明らかにする「認証」(Authentication)ではなく、アプリケーションごとに与えられた許可、認可(Authorization)を示す方式です。"Auth"という4文字からは"Authentication"を思い浮かべてしまいがちですが、認可(Authorization)とは違うものですのでセキュリティについて触れる場面では厳密に区別しましょう。

 OAuth 1.0は通信を傍受されたとしても成りすましができないよう、幾分複雑な呼び出し手順が必要な仕組みです。OAuth 2.0ではOAuth 1.0の複雑さの反省から、通信をSSLで暗号化することを前提にして簡単に使えるようにしました。

まとめ

 いかがでしたでしょうか? 知識チェックですので知らなければ解きようがない問題ばかりですが、「とりあえず知っておいて損はしない」トピックを出来るだけ織り込んでみました。今回取り上げた「歴史的側面」も踏まえて理解することでその設計思想や今後のトレンドが見えてくるでしょう。

 私はTwitter APIを触りはじめて7年ほどになりますが、まだまだその応用範囲の広さに驚かされる毎日です。そしてAPIの組み合わせによりソフトウェア、Webの可能性は無限大に広がります。皆さんも是非APIを使ってわくわくするアプリケーション、サービスを作って見てください!

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加

【AD】本記事の内容は記事掲載開始時点のものです 企画・制作 株式会社翔泳社

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7673 2014/03/07 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング