出題の背景
昨年末、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