人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

APIについて教えてください。
基本的な部分は理解しているつもり
(Application Program Interfaceの略とか、いろんな機能の詰め合わせとか)
なんですが、どうも感覚的にしっくりときません。

例えば
Keisan.java-------
public class Keisan {

public static void main(String[] args) {
int a = 1;
int b = 2;
int c = Api.tasizan(a, b);

System.out.println(c);
}

}
-------

Api.java-------
public class Api{
public static int tasizan(int a,int b){
int c = 0;
c = a+b;
return c;
}
public static int hikizan(int a,int b){
int c = 0;
c = a-b;
return c;
}
}
-------

こんなプログラム組んだとして、この「Api.java」は、APIとよべるもんなのでしょうか?呼べないとしたら、このApi.javaと他のAPIとの違いはなんなんでしょうか?

●質問者: your
●カテゴリ:コンピュータ ウェブ制作
✍キーワード: Class API application Interface Java
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● TONTON3
●20ポイント

私の感覚だとAPIっていうのは他のプログラムからでも使えるためのインタフェースの呼び方であると

考えます。機能の呼び出し手法の呼び方。

例のものも自分のプロジェクトだけで使うものでしたら単なる関数ですけど

例えばこれをCとかからでも使えるようにするやり取りを実装すればAPIではないでしょうか

◎質問者からの返答

ありがとうございます。

ただ、皆様若干回答が違っていて悩んでおります。


2 ● hogege
●20ポイント

API とは、その名の通り、

何かアプリケーションがあって、

そのアプリケーションを操作する為、アプリケーションの機能を利用する為

のインターフェースライブラリです。

「Api.java」は単なるライブラリです。

◎質問者からの返答

ありがとうございます。

hogege様の回答ですと、まず「アプリケーション」の存在がないといけないというように読めますが、

アプリケーション=機能の入り口って感じでよいのでしょうか?

そう考えると、ライブラリを抽象化したインタフェースをAPIって呼ぶイメージなんですがあってるんでしょうか?


3 ● hujikojp
●20ポイント

いえません。

まずAPIは抽象的なインタフェースです。実装である Api.javaはAPIではありません。

Api.javaが実装しているインタフェース (これは Javaの interfaceではなく、もっと広い意味) は APIであるとはいえます。

ただ、これを「API」だと強調することでどの程度利益を得ることができるかは別問題です。

そういったパラメータで APIとしての重要さが決まるでしょう。

逆に、上の条件の必要性が低い場合、APIとして強調する必要性も必要性も引くなるでしょう。

◎質問者からの返答

ご回答ありがとうございます。

API=抽象的なインタフェースと書かれておりますが、「抽象的ではないインタフェース」ってそもそもあるんでしょうか?

それともこっちのインタフェースもJavaのinterfaceではなく、コネクタ的な意味のほうのインタフェースってことでしょうか?


4 ● quintia
●20ポイント

application を英英辞典(http://www.ldoceonline.com/)で引くと、第3義に、

a piece of computer software which does a particular job

と出てきます。"a particular job" だと"特定の作業"ですね


http://www.merriam-webster.com/dictionary/application だと、

that performs one of the major tasks

となってもっと強い"the major tasks"という言葉になっています。


で、例えば、Windows API と言えば"Windows上で動く"というところが、"a particular job"であり"the major tasks"なのだと思います。

(Windows API なしで ウィンドウを1枚出すだけの Windowsアプリケーションを作ることを想像してください)

もちろん、それ以外にもたくさんのユーティリティ的な関数は用意されていますけど。


ここまでが原義的な、黎明期の話。


このあと、APIの意味は少し変化します。

Java APIや、Java Servlet API などでは「Java(あるいはServlet)の実行/開発環境はこれだけの inteface を満たす実装を持っていなければならない」という様な意味を持つようになりました。

例えば「Java Servlet API 2.2仕様に完全に準拠した実装になっています」というような表現がそれを示しています。


そしてさらにまた揺り返しが起きていると思います。

Web API です。

「このWebサービスはこの様な機能を提供します。要求(request)と結果(response)はこういう形式です」という意味です。


結局のところ「要求と結果の形式の取り決め」という点で別に変化があるわけではありませんが、言葉の使い方は変わってきていると思います。


で、回答になりますが、Api.java を 「APIと呼ぶ」ということは、

「私は足し算と引き算をするフレームワーク/実行環境/サービスを提供します。そのためにはこの取り決めにしたがって呼び出してください」と宣言するということに等しいと考えます。

その宣言に対して「そんなものはフレームワーク/実行環境/サービスじゃないだろ」と思う人がいれば(というか普通そう思うと思いますが)、その人はそれを API とは呼ばないでしょうね。ということになるんじゃないでしょうか。

◎質問者からの返答

ご回答ありがとうございます。


5 ● wcoan
●20ポイント

何かしらの機能、サービスを利用するための入り口

みたいな感じだと思います。

「いろんな機能の詰め合わせ」をAPIとは言わないと思います。

電子レンジならスイッチの部分がインタフェースであり、テレビならリモコンがインタフェース、車ならハンドルとペダルがインタフェースです。

電子レンジの暖める機能がサービスで、ボタンがインタフェースです。

テレビの受信器やディスプレイがサービスで、リモコンがインタフェースです。

リモコンは手段であって、機能ではないですが、リモコンがないと電源も入らない。

そういう感じですかね。

class Keisanの例は、足し算と引き算という立派な「サービス」を提供していますが、と同時にインタフェースでもあるので、話がややこしくなっているのだと思います。

public static int tasizan(int a,int b);

と表現すれば、インタフェースだと思います。

C言語でヘッダだけ渡されて、「これ使って呼んでくれ」と言われたら、インタフェースですね。

オブジェクト指向言語なら、「Aってクラスを使って呼び出せよ。その中でクラスBを呼んで実装してるけど、直接呼ばれたら後から変更できなくなるからやめてくれ。クラスAは上位互換保証するからさ。」と言われたときには、Aがインタフェース用のクラスで、Bはそうではありません。

変な例ですが、

指定されたフォルダにファイルを保存したら、勝手にその中を解析してサイズをメールしてくれる

というサービスがあったとすると、

「ファイルを置いておけばいい」という部分と「サイズがメールで飛んでくる」という部分がインタフェースです。Application ProgramのためのInterfaceかどうかは疑問ですが、プログラムからだって利用できますので、立派にAPIだと思いますが、これをAPIと呼ぶと、あほかと言われます。

なので、APIは、関数だったり、クラスだったりするのが一般的です。

◎質問者からの返答

ご回答ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ