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との違いはなんなんでしょうか?

回答の条件
  • 1人2回まで
  • 登録:2008/02/29 15:15:49
  • 終了:2008/03/07 15:20:04

回答(5件)

id:TONTON3 No.1

TONTON3回答回数212ベストアンサー獲得回数42008/02/29 15:49:18

ポイント20pt

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

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

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

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

id:your

ありがとうございます。

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

2008/02/29 19:05:26
id:hogege No.2

hogege回答回数61ベストアンサー獲得回数42008/02/29 16:49:53

ポイント20pt

API とは、その名の通り、

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

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

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

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

id:your

ありがとうございます。

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

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

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

2008/02/29 19:05:27
id:hujikojp No.3

hujikojp回答回数101ベストアンサー獲得回数72008/02/29 16:55:26

ポイント20pt

いえません。

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

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

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

  • どの程度インタフェースとして固定するつもりか。将来のバージョンでも使えるようにするか
  • どの程度のモジュールがこの APIに依存するのか
  • そこを固定することでどの程度問題がわかりやすくなるか

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

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

id:your

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

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

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

2008/02/29 19:09:10
id:quintia No.4

quintia回答回数558ベストアンサー獲得回数672008/02/29 17:19:48

ポイント20pt

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 とは呼ばないでしょうね。ということになるんじゃないでしょうか。

id:your

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

2008/03/03 09:30:04
id:wcoan No.5

wcoan回答回数6ベストアンサー獲得回数12008/02/29 20:36:36

ポイント20pt

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

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

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

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

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

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

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

そういう感じですかね。

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

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

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

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

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

変な例ですが、

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

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

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

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

id:your

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

2008/03/03 09:33:10

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません