最初に断っておきますが、僕はプログラミング初心者なので、分かりやすく且つ本質的にご教示いただけましたら幸いです。身近な具体例とか交えてくださると幸いです。



APIの定義について以下のように書かれていました。

「OS(基本ソフト)やアプリケーションソフト、あるいはウェブアプリケーションが、
自ら持つ機能の一部を外部のアプリケーション(ソフトやウェブサービス)から簡単に利用できるようにするインターフェース。
ここで言うインターフェースとは、機能の呼び出し手順や記述方法などを定めた仕様を指す。」


 


質問1:上記に、「ここで言うインターフェースとは、機能の呼び出し手順や記述方法などを定めた仕様を指す。」と書いてありますが、これは具体的にどういうことですか?呼び出し手順とはなんですか?

質問2:質問1に関連して、インターフェースについて調べていたところ、定義として以下のようなことが書いてありました。

「ソフトウェアインターフェースは、プログラム間でデータをやり取りする手順や形式を定めたもの。特に、OSやコンポーネント(部品化されたソフトウェア)の機能を外部から呼び出して利用するための規約をAPIという。」


以下の定義の文の「プログラム間でデータをやり取りする手順や形式を定めたもの。特に、OSやコンポーネント(部品化されたソフトウェア)の機能を外部から呼び出して利用するための規約をAPIという。」という記述についても全体的によくわかりません。

どういうことでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (4件)

『インタフェース』


http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3% …

つまり、何か(A)と何か(B)の中間にある接続部分がインタフェースです。
例えばWindows OSにはGUI(Graphical User Interface)があります。
GUIがOS(A)と人間(B)の間にあるので、人間はOSの複雑な内部構造を知らなくてもGUIを経由してマウス操作をすることによりコンピュータを操作することができます。
APIはApplication Programming Interfaceですが、この場合APIは、呼び出す側のプログラム(A)と呼び出される側のプログラム(B)の間にあるインタフェースになります。大部分の場合、Aはあなたが作るプログラムで、Bは既存のプログラムになるでしょう。
例えば、地図を使ったアプリケーション(A)を作りたいと思ったとしましょう。
1から地図の機能を作ってもよいですが、Googleに高機能なGoogle Map(B)があるのであの機能が使えたら良いのに、、、と思います。
そこでGoogle MapのAPIを使い、地図機能はGoogle Mapを利用して自分のアプリケーションを作ることにします。
APIの具体的なものはは例えばこれです:
http://code.google.com/intl/ja/apis/maps/documen …

「機能の呼び出し手順や記述方法などを定めた仕様」が書いてあるのが分かるでしょうか。あなたのプログラム(A)内から、APIのどんなメソッドをどういう記述方法で呼び出せばGoogle Map(B)のどの機能を利用できるのかが定義されています。

APIがあるので、あなたはGoogleがどうやってあのような優れた地図アプリケーションを作っているのかを理解しなくても、APIに従って記述することによりその機能の一部をあなたのプログラムから呼び出すことができます。
    • good
    • 1
この回答へのお礼

お返事遅れてしまい大変申し訳ありませんでした。。

ありがとうございます!
googleのHPの引用ありがとうございます!
わかりやすかった!
説明も抜群によかったです。

ベストアンサー決定!

お礼日時:2011/04/25 01:30

質問1と2の文章は、順番と表現が違うだけで、まったく同じことを説明しています。


1では
「APIはインターフェース」「インターフェースは(ここでは)プログラム間の規約」
2では
「インターフェースはプログラム間の規約」「APIはインターフェースの一種」

1の文章で理解できてないのですから、同じ事が書いてある2も理解できないでしょう。


ちなみに
・APIのIはインターフェースのIなので、「APIはインターフェース」というのは極当り前。
・「インターフェース」は「複数のものを結ぶもの」という非常に大きな概念です。
登場する文脈により、何を表しているかが大きく変わります。
    • good
    • 1
この回答へのお礼

お返事遅れてしまい大変申し訳ありません、、


まったく同じことでしたか。。すみません。。理解不足でした。。

お礼日時:2011/04/25 01:29

なにか大学の本でも読んでおられるんでしょうか。


前の引数の質問も似たような感じですね、
概念的な言葉の羅列ばかり読んでいてもなにもわかりませんよ。
学校の課題なら先生に質問しましょう。
っと、これでは冷たいので。

プログラムってのは一から全て作ると大変なので
既に作成されたものを利用する、ということをよくします。

たとえばJavaなら他のJavaで作ったプログラムのクラスからオブジェクトを
作成してメソッドを呼び出したりします。

C言語なら他で定義された関数を呼び出します。

WEBの世界なら他のサイトで作成されたCGIなどの機能を
何らかの方法で呼び出して結果を自分のサイトに埋め込んだりします。
Googleマップの地図が企業やお店のサイトに埋め込まれてるのを
見たことあるでしょう。
ブログなどにGoogleやアマゾンの広告が埋め込まれているのを見たことがあるでしょう。
ああいうのはあらかじめ用意されたAPIを利用して実現しているわけです。

他にはWordのなかにExcelの表を埋め込むというのをやったことをありませんか?

そういうふうに機能を部品として用意して利用してもらうということを
よくやります。

機能を呼び出すとき、どのような順序で呼ぶのか
データを渡すときどのような形式、データの順序で渡すのか
というのがそのAPIを作った人が決めるわけです。

切符の自販機から切符を買うことを考えて見ましょう。
1.まずどこまで行くのか決めます。
2.値段を調べます。
3.自販機にお金を入れます。
4.目的地までの値段のボタンを押します。
5.切符とおつりを受け取ります。
という、データと操作のやり取りがありますよね。
このような切符を買うという機能を利用するための手順や決まりを
プログラムの世界ではAPIとかシステムコールとかいろんな言い方をするわけです。

サブルーチンとかシステムコールなどはプログラムの中から他のプログラムを
呼び出すというイメージが多いのに対して
APIはアプリケーションから他のアプリケーションの機能を呼び出すイメージを
さす事が多いような気がします。
まぁ呼び方やイメージの違いだけといえばそうかもしれません。

本の抽象的な文章ばかり読まずに具体例を見ることをお勧めします。
    • good
    • 0
この回答へのお礼

お返事遅れてしまい大変申し訳ありません。。


具体例わかりやすかったです!
抽象的な文章ばっかりだとわからなくなりますよね、、ありがとうございます!

お礼日時:2011/04/25 01:27

OSには機能がありますよね。


例えば画面に何かを表示するには、描画する画面を意味するオブジェクトを取得して、そのオブジェクトに対して「これこれを描画してくれ」と指示を出します。

こういった手順が形式化されていないと、プログラマはどのようにしたら画面に何かを表示することが出来るのか分かりません。
形式化されているから、一定の手順を踏めば目的を達成出来ることが分かるんですね。

例えばスーパーで買い物をするのも、デパートで買い物をするのも同じですよね。
商品を手にして、レジに向かって、そこで店員さんにお金を払うと、目的のものを手に入れることが出来ます。
これが形式化された手続き(仕様や規約)ということです。
    • good
    • 0
この回答へのお礼

お返事遅れて大変申し訳ありません。。。

具体例があったため、大変わかりやすかったです!
ありがとうございます!

お礼日時:2011/04/25 01:27

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAPIについてプログラム初心者がわかるような解説をお願いします

APIについて理解してくれない社員がいます。
APIという言葉自体はネットで調べればいくらでも
ありますが、なんか今一実感がわかないらしいです。

プログラム初心者でもわかるようにAPIについて
理解できるような説明のしかたってあるでしょうか?

Aベストアンサー

質問者自身が理解できているなら、それをそのまま教えてあげれば良いと思います。

そもそもAPIを理解させる必要性を感じません。
解らないならとりあえず、ブラックボックスのまま進めればいいんじゃないですか? 使っていればそのうちわかると思いますよ。

初心者にいきなり理屈を教えても解らないのは当然ですし、
とりあえず、こういうものだから、こうつかえとリファレンス位
渡しておけばよいかと思いますよ。

あとは本人のやる気次第かと・・・

Qミドルウエアの具体例を教えてください。

初級シスアドで、OSとアプリケーションソフトの中間に位置するものとしてミドルウエアがあり
 ・データベース管理システム(DBMS)
 ・通信管理システム(LAN制御を含む)
 ・ソフトウエア開発支援ツール
 ・EUCツール
 ・運用管理ツール
説明されています。なんとなく具体例が推測できるものもありますし、ぜんぜんイメージできないものもあります。
そこで、推測が間違っていないか確認したいのと、イメージできないものの場合具体例をあげていただければ助かります。

(1) データベース管理システム(DBMS)
多分、OracleやSQL-SeaverやMySQLのようなものだと思うのですが。
この推測はあってますか?

(2) 通信管理システム(LAN制御を含む)
プラットホームや使用アプリが違う場合のデータのやり取りを行うようなもの・・・というイメージがあります。使用アプリの場合はODBCドライバみたいなものの様な(全然自信ない)、プラットホームとなると実例が浮かんできません。

(3) ソフトウエア開発支援ツール
なんでしょう?プログラミングジェネレータのことでしょうか。
EXCELマクロの自動記録機能なんてのもこれに入るのでしょうか。ひょっとするとEXCELマクロは、次のEUCツールでしょうか?

(4) EUCツール
AccessとかEXCELとかでしょうか。イメージ沸きません。

(5) 運用管理ツール
う~ん・・・なんでしょう?

補足:IMEとかもミドルウエアと考えてよいのだろうか? WEBで調べるとワープロや表計算もミドルウエアと定義しているものもあります。それは少し拡張解釈なような気がします。

いずれにせよ、すっきりした定義と具体例を書いてあるものを見つけられないのです。

宜しくお願いします。

初級シスアドで、OSとアプリケーションソフトの中間に位置するものとしてミドルウエアがあり
 ・データベース管理システム(DBMS)
 ・通信管理システム(LAN制御を含む)
 ・ソフトウエア開発支援ツール
 ・EUCツール
 ・運用管理ツール
説明されています。なんとなく具体例が推測できるものもありますし、ぜんぜんイメージできないものもあります。
そこで、推測が間違っていないか確認したいのと、イメージできないものの場合具体例をあげていただければ助かります。

(1) データベース管理システ...続きを読む

Aベストアンサー

(1) データベース管理システム(DBMS):お書きになられた通りです。
(2) 通信管理システム(LAN制御を含む:TCP/IPドライバー等通信制御を行うアプリケーションです。ファームウェアも該当するでしょう。通常ユーザが操作する類のアプリケーションではありません。
(3) ソフトウエア開発支援ツール:VisualBASIC、C言語、Perl等、亜ぷロケーションを開発するツール、プログラミング言語と言えば分かり易いでしょうか。
(4)EUCツール:エンドユーザが使用するアプリケーションです。
(5)運用管理ツール:クライアントPCの管理ツール、DBシステムの管理ツール、WEB/メールのサーバ管理等、運用機器を管理するツールです。最近では情報漏えいを防止する目的のツールが多数出ています。

QEXCELのセルが動かないです

普通は、矢印キーを押すと、セルが動きますよね。

今日、仕事中
矢印キーほ押してもセルが動かなくなりました。
画面は動きますがセルがついて来ないのです。
そのPCで使う場合どのエクセルも同様の動きです。

ツールバーあたりを設定する必要がありますかね。

Aベストアンサー

そのPCのScroll Lock (Scr Lk)キーが押されていませんか?

Qコンテキスト(Context)の意味がさっぱり分かりません。

コンテキスト(Context)の意味について、下記のURLを参照しても意味が分からないしピンと来ないです。

http://kaden.yahoo.co.jp/dict/?type=detail&id=3730

私なりの解釈としては「つまり、コンテキストは、あらゆる型の引数を演算子や関数が、その引数の型に合わせて、返り値の型を選択する場合、その演算子や関数を呼び出す際の型がコンテキストである」ということです。

また、コンテキストは、どの状況において、どのような処理を応ずればいいのかという意味で考えています。このことを皆様はどう思いますでしょうか。ご意見をお聞かせください。

コンテキスト(Context)自体の言葉は意味が分かりづらいし、PHPのプログラミングでコンテキストの言葉はどのように使われますでしょうか。

Aベストアンサー

コンテキストはもっと一般的な言葉です。
日本語の文脈の意味を素直に考えれば、問題ないと思います。
たとえば、
「蕎麦をいただいた」という発話で「いただいた」は「貰った」と「食べた」の2つの意味が考えられます。この発話の表れた周りの会話でどちらの意味かが変わります。この会話の流れが文脈です。
プログラミング言語の世界でも、特定の表現が、どこにどう書かれたかで意味が変わってきます。これが文脈依存です。そして、意味に影響を与える周りの記述が文脈(コンテキスト)です。

Q「以降」ってその日も含めますか

10以上だったら10も含める。10未満だったら10は含めない。では10以降は10を含めるのでしょうか?含めないのでしょうか?例えば10日以降にお越しくださいという文があるとします。これは10日も含めるのか、もしくは11日目からのどちらをさしているんでしょうか?自分は10日も含めると思い、今までずっとそのような意味で使ってきましたが実際はどうなんでしょうか?辞書を引いてものってないので疑問に思ってしまいました。

Aベストアンサー

「以」がつけば、以上でも以降でもその時も含みます。

しかし!間違えている人もいるので、きちんと確認したほうがいいです。これって小学校の時に習い以後の教育で多々使われているんすが、小学校以後の勉強をちゃんとしていない人がそのまま勘違いしている場合があります。あ、今の「以後」も当然小学校の時のことも含まれています。

私もにた様な経験があります。美容師さんに「木曜以降でしたらいつでも」といわれたので、じゃあ木曜に。といったら「だから、木曜以降って!聞いてました?木曜は駄目なんですよぉ(怒)。と言われたことがあります。しつこく言いますが、念のため、確認したほうがいいですよ。

「以上以下」と「以外」の説明について他の方が質問していたので、ご覧ください。
http://oshiete1.goo.ne.jp/kotaeru.php3?qid=643134

Qpingでポートの指定

pingでIPアドレスを指定して、通信できるかどうかというのは
よく使いますが、pingでポートを指定して応答するかどうかは調べられるのでしょうか?

よろしくお願いします

Aベストアンサー

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含むICMP)ではできません。

FTPの疎通確認であれば、クライアントからサーバに対するTCP/21通信(FTP-CMD)が可能であること(サーバからクライアントへのTCP/21からの応答を含む)+サーバからクライアントに対するTCP/20通信(FTP-DATA)が可能であること(クライアントからサーバへのTCP/21からの応答を含む)が必要でしょう。

監視ソフトによるものであれば、
・クライアントからサーバへのログイン(TCP/21)
・クライアントからサーバへのlsの結果(TCP/20)
で確認すればよいでしょう。

pingを含むICMPというプロトコルは、OSIの7レイヤで言うところのL2(同一セグメント内通信)とL3(IPルーティングされた通信)の両方にまたがる、ちょっと珍しいプロトコルです。

IPアドレスは指定できますが、別サブネットに属するIPアドレスに到達できればL3通信、できなければゲートウェイと呼ばれる同一サブネットに属する中継装置からの回答を得るという点でL2(MAC通信ではなく、同一セグメント内通信という意味)通信です。

ポート番号はL4で使用されるアドレスですから、L4機能の疎通確認はping(を含む...続きを読む

Q目処(めど)と目途(もくと)

目処と目途の使い分けについて教えてください。
送り仮名に違いがありますか。
PC辞書で「めど」の変換を探すと目途が入っているのもありますね。
これは明らかに誤用ですよね。

Aベストアンサー

めどはやまと言葉ではないでしょうか。もしそうなら漢字は当て字であり、どちらが正しいというものでもなく、世間で一般的にどう使い分けされているかということに過ぎないと思います。

広辞苑ではめど(目処)もくと(目途)と分けて記載されているだけで説明がなく
不親切です。朝日新聞社の漢字用語辞典では、めど(目処、目途)とあり、私のPCでも、めどで両方が転換できます。

解決のめどがつくとか、目標達成のめどが立ったなどと使われるので、
ものごとがその完成、実現にちかずいたということを意味し、目標とは若干ニュアンスが異なると思います。目標は高くとは言いますが、目途(目処)は高くとはいいませんね(この部分は蛇足です)

Qallocってなんですか?

メモリ領域を確保するとかって言うことらしいのですが、
charとかintとかで定義するのとは違うのですか?

charとかで定義した場合もメモリ領域は確保されていると思うのですが、
どこが違うのでしょうか?
違いが理解できません。

どなたか、詳しく教えてください。お願いします。

Aベストアンサー

>例えばの場合のと申しますか、
>参考のソースを少し教えていただけませんか?

プログラム実行時に初めて処理人数(ninzu)が判明するシステムで、データを読み込んで処理する関数 func() を考えてみます。便宜上データの型は int で言語はCとします。本当はエラー処理(メモリが足らない場合などの)が必要ですが省略します。

void func(int ninzu)
{
  int* pData;
  intloop;

  /* 人数分の int エリアを確保 */
  pData = malloc(ninzu * sizeof(int));

  /* 人数分の int データを読み込み */
  for(loop = 0; loop < ninzu; loop ++)
  {
    *(pData + loop) = ReadData();
  }

  /*** 読みこんだデータを使って ***/
  /*** なんらかの処理&出力   ***/

/* いらなくなったエリアを開放 */
  free(pData);
}

単純化して書くとこんな感じになります。実際にはポインタ pData は単純な int へのポインタではなく構造体へのポインタだったりすることになるでしょう。これだと本当に必要なメモリだけを使うことになり、しかも人数の変動にも対応できることになります。

>こいつは"出来るな"って思われるようになるわけですね。
>他のアプリのことも考えてのプログラムって事ですね。

そうなんですが、人間がコーディングしているのでCやC++で書かれた市販されているアプリケーションでもエリア解放を忘れてしまっているプログラムがよくあります。だから同じアプリを何度も起動、終了を繰り返すと解放されないメモリが蓄積されリソース不足になってしまうやつはそういったバグを持っているということがわかります。

>例えばの場合のと申しますか、
>参考のソースを少し教えていただけませんか?

プログラム実行時に初めて処理人数(ninzu)が判明するシステムで、データを読み込んで処理する関数 func() を考えてみます。便宜上データの型は int で言語はCとします。本当はエラー処理(メモリが足らない場合などの)が必要ですが省略します。

void func(int ninzu)
{
  int* pData;
  intloop;

  /* 人数分の int エリアを確保 */
  pData = malloc(ninzu * sizeof(int));

  /* 人数分の int データ...続きを読む

Q「いずれか」と「いづれか」どっちが正しい!?

教えて下さいっ!
”どちらか”と言う意味の「いずれか」のかな表記として
「いずれか」と「いづれか」のどちらが正しいのでしょう???

私は「いずれか」だと思うんですが、辞書に「いずれか・いづ--。」と書いてあり、???になってしまいました。
どちらでもいいってことでしょうか?

Aベストアンサー

「いずれか」が正しいです.
「いづれ」は「いずれ」の歴史的かな遣いですので,昔は「いづれ」が使われていましたが,現代では「いずれ」で統一することになっていますので,「いずれ」が正しいです.

Qフェールソフトとフェールセーフの違い

フェールソフトもフェールセーフも、両方ともシステムが故障した場合、危険を回避する方法(考え方)だと思いますが、どのように違うのでしょうか?具体的な事例を挙げて説明してもらえればありがたいです。例えば、飛行中の航空機がエンジントラブルに遭遇した場合、これを回避するのはフェールソフトですか、それともフェールセーフでしょうか?

Aベストアンサー

フェールセーフ

あらかじめ故障が起こることを想定し、被害を最小限にとどめるよう
工夫しておくという安全思想。
ジャンボジェット機のエンジンが万が一故障しても、一つだけ動いていれば
飛び続けられるように設計されていることが「フェールセーフ」。

フェ-ルソフト

システムの一部に障害が発生した際に、故障した個所を破棄、切り離すなどして
障害の影響が他所に及ぼされるのを防ぎ、最低限のシステムの稼動を続けるための技術。
ハードディスクを複数用意して常にミラーリングするRAIDシステムがそれに当たる。

なお、RAIDシステムっていうのは、ハードディスクがいくつもあって、その中のひとつが
壊れても、他のハードディスクに内容がミラーリングされているので、その内容を
つかって残りのハードディスクで稼動することが出来るといった感じのもの。

飛行機でいうと、エンジンを複数用意して、その中の一個が壊れた時には
それを止めてしまい、残りのエンジンで運行すること、となるけど、ちょっと変ですね。

フェールセーフは思想というか考え方で。
それを実現する具体的な技術がフェ-ルソフトってな感じかと思うのですが。

フェールセーフ

あらかじめ故障が起こることを想定し、被害を最小限にとどめるよう
工夫しておくという安全思想。
ジャンボジェット機のエンジンが万が一故障しても、一つだけ動いていれば
飛び続けられるように設計されていることが「フェールセーフ」。

フェ-ルソフト

システムの一部に障害が発生した際に、故障した個所を破棄、切り離すなどして
障害の影響が他所に及ぼされるのを防ぎ、最低限のシステムの稼動を続けるための技術。
ハードディスクを複数用意して常にミラーリングするRAIDシス...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報