• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:APIを学ぶのに必要な事)

APIを学ぶのに必要な事

noname#244856の回答

  • ベストアンサー
noname#244856
noname#244856
回答No.3

正直、プログラミングスクールは料金がかかる割に対価が少ないような印象を受けるので、個人的にはあまりおすすめできません。それよりはGoogleを主体的に利用して学習していく方法のほうが無料で済むのでありがたいと思います。 多分APIに対してとっかかりにくいのは、API以前にネットワーク通信技術の背景が分かっていないからだと思います。ヒントとなるように順を追って掲載していきますので、よかったら参考にしてください。 まず、「プロトコル」「OSI参照モデル」「TCP/IP」を順に検索してみてください。 【要点: 用語整理】 ・プロトコルは通信のための取り決め ・OSI参照モデルはプロトコルを理論的に階層化したもの ・TCP/IPはOSI参照モデルを一部採用しながら現実に実装したもの TCP/IPのWikipediaのページを開いてみてください。 http://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%83%BB%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%83%BB%E3%82%B9%E3%82%A4%E3%83%BC%E3%83%88 1. リンク この部分はハードウェア屋さんの仕事なので、プログラマが直接触れることは少ないです。 2. インターネット IPの意味だけ把握していればOKです。単純に「インターネット上の住所」という程度で構いません。 3. トランスポート ※重要 通信相手のIPを指定して実際に通信を行う層です。「実際にどうやって通信しているか」を掘り下げる最下の層はここで構いません。これ以上深いところに掘り下げるとハードウェアが関連してくるので、こことこれより上の層を理解していれば十分です。「TCP」と「UDP」が非常によく使われます。UDPは音声通話など「多少欠損してもいいから速度第一」という目的、TCPは正確性を追求するときに使われます。大部分の通信はTCPで行われているのが現状です。 4. アプリケーション ※重要 TCPやUDPを使えば、相手にテキストデータ・画像データ・映像データなど、どんなデータでも送信することが可能です。しかし、「ここまではファイル名などの情報」「ここからは実際のデータ」といった線引きが為されている必要があるのは言うまでもないでしょう。それを行うのがこの層です。「HTTP」や「FTP」などが有名です。 実際にTCPを使っていく前に、1点補足しておきます。ルータなどのハードウェア機器に関して「ポート」などの名前を聞いたことはあると思いますが、これは内外を繋ぐ出入口のことを指します。出入り口はトランスポート層のプロトコルごとに65536個ずつ割り振られています。つまり、「TCPポートで0~65535」「UDPポートで0~65535」というように存在しているということです。実際に番号を指定しないと通信を行うことが出来ません。また、既に使用されているポートは別のアプリからは使うことが出来ません。 【要点: TCP通信の実現に必要なもの(UDP通信でも同様)】 ・IPアドレス(またはホスト名)の指定 ・ポート番号の指定 なお、よく使われるポートはアプリケーション層のプロトコルごとに慣用的に決められています。ポートの指定を省略したときはこれがデフォルトとして使われることが多いです。 HTTP → 80 HTTPS → 443 さて、実際にTCPを使ってみましょう。試しに以下のページを取得してみます。 A very simple webpage http://csb.stanford.edu/class/public/pages/sykes_webdesign/05_simple.html コンソールからtenletコマンドを用いれば、簡単にTCP通信を行うことが出来ます。 ※ WindowsVista以降ではデフォルトでは使えないので注意してください http://so-zou.jp/software/tech/network/tool/telnet/ 1. 「telnet」でtelnetクライアントを起動。 2. 「open csb.stanford.edu 80」でTCP接続。 3. 「GET /class/public/pages/sykes_webdesign/05_simple.html HTTP/1.0」と入力して改行。 4. 「Host: csb.stanford.edu」と入力して改行。 5. 何も入力していない状態で改行。 すると、コンソールにダーッとHTMLソースが流れ込んでくると思います。でも、それより前に何やらメタ情報のようなものもついていますよね?これは「レスポンスヘッダー」と呼ばれるものです。逆にあなたが最初にステップ3,4,5で送信したものは「リクエストヘッダー」と呼ばれます。詳しくは以下のリンク先にまとめられているので是非読んでください。 HTTP入門 http://www.tohoho-web.com/ex/http.htm Webブラウザは日頃何をやっているかというと、先ほどの通信を行い、「レスポンスヘッダー」の情報を裏で解釈しつつ、「レスポンスボディ」のHTMLをもとに画面にテキストや画像を表示しているだけのことです。 --------------------------------------------- ~閑話休題~ PHPはさまざまなレベルでの通信に対応しています。 [TCPを直接叩く低レベル通信] <?php $fp = stream_socket_client('tcp://www.example.com:80'); fwrite($fp, implode("\r\n", [  "GET / HTTP/1.0",  "Host: example.com",  "",  "" ])); $resopnse = stream_get_contents($fp); ※ レスポンスヘッダが含まれます。ヘッダとボディを分割したいときは以下のコードを使ってください。 list($header, $body) = explode("\r\n\r\n", $response, 2); ※ fgetsでループする人もいますがstream_get_contentsで十分です。 ※ 文字列として得たい場合はstream_get_contents、そのまま出力するときはfpassthruを使ってください。 ※ stream_socket_clientの代わりにfsockopenを使うことも出来ます。 [HTTPを利用する高レベル通信 (file_get_contents編)] <?php $resopnse = file_get_contents('http://www.example.com:80/'); ※ レスポンスヘッダは含まれません。その代わり、レスポンスヘッダの配列は $http_response_header としてその場に定義されます。 ※ 文字列として得たい場合はfile_get_contents、そのまま出力するときはreadfileを使ってください。 [HTTPを利用する高レベル通信 (fopen編)] <?php $fp= fopen('http://www.example.com:80/', 'r'); $resopnse = stream_get_contents($fp); ※ レスポンスヘッダは含まれません。その代わり、レスポンスヘッダの配列は $http_response_header としてその場に定義されます。 ※ 文字列として得たい場合はstream_get_contents、そのまま出力するときはfpassthruを使ってください。 [HTTPを利用する高レベル通信 (cURL編)] <?php $ch = curl_init(); curl_setopt_array($ch, [  CURLOPT_URL => 'http://www.example.com:80/',  CURLOPT_RETURNTRANSFER => true, ]); $resopnse = curl_exec($ch); ※ レスポンスヘッダは含まれません。レスポンスヘッダを取得するにはちょっとした工夫が必要ですが、ここでは省略します。 --------------------------------------------- さて、ここまでちゃんと理解できていればAPIの理解ももはやすんなりと出来る状態だと思います。次の説明に行きたいのですが…残り文字数が少ないので回答を分けることにします。

soccerrlove
質問者

お礼

ベストアンサーはNo.3とNo.4二つあるのですが、No.3のほうにしておきます! ありがとうございました!

関連するQ&A

  • 在庫更新APIなどの情報を中に入れる系のAPI

    在庫更新などのAPIなどはどのタイミングで在庫が更新されるのでしょうか? 例えば、楽天商品データをホームページに表示させたい場合は、リクエストを送って、それに対するレスポンスをひもづけて、表示させると思うのですが(合ってなかったら私の勉強不足です)、在庫更新などの場合は情報をリクエストで送ることで、在庫が更新される?のでしょうか? 在庫が更新されるのはどうやってされているのかが知りたいです。 回答よろしくお願いします!

    • ベストアンサー
    • PHP
  • 楽天APIを利用したい

    特定の質問になってしまうのですが、 楽天のAPIを利用しhttp://www.pillow.co.jp/3works/ec/imakore.htm のような仕組みを作りたいと考えております。 商品の内容、注文日、時刻、都道府県の情報はCSVファイルとしてあるとして、上記のようなHTMLファイルはどのようにして作れますでしょうか。

    • ベストアンサー
    • AJAX
  • ポケモン プラチナ BW 改造 ポケシフター

    ポケモンについてです (1)プラチナでコードフリークを使う (2)プラチナでレベル100のポケモンを作る (3)ブラックでポケシフターを使う (4)プラチナの(2)のポケモン(レベル100)をブラックに送る ここからが本題です プラチナで改造したポケモンをブラックに送ります その改造したポケモンをブラックでwi-fi対戦や交換しても大丈夫なのでしょうか?

  • Accessで在庫管理する時の在庫数の出し方

    在庫管理をaccessで行おうとしています。 在庫数の出し方が分かりません。 =DLookUp("[在庫数]","[T_発注]","助成物コード='" & [Forms]![F_受注]![助成物コード] & "'")-nz([数量]) とすると、それらしい数は表示されるのですが、次のレコードで同じ商品(助成物コード)を指定すると、前のレコードの在庫と同じ数になってしまいます。 =DLookUp("[在庫数]","[T_発注]","助成物コード='" & [Forms]![F_受注]![助成物コード] & "'")-nz([数量]) した結果を次の『=DLookUp("[在庫数]"』の在庫数に引き継いでもらいたいのですが、どうすれば良いか分かりません。 上記で『助成物コード』が商品コードで、 『数量』が受注数です。 他にどんな情報があれば良いか分かりませんので、不足している情報があればご指摘下さい。

  • Accessの条件に合致した集計と抽出について

    条件に合致した場合の集計と抽出について教えてください。 テーブルで、 商品コード 在庫数 滞留日数 あ001    5    100 あ001    1    50 い002    10   20 とあり、 商品コードが重複した場合は、在庫数を合計し、滞留日数は値が大きい方を表示、 商品コードの重複がない場合はそのまま表示 という条件を設定し、 商品コード 在庫数 滞留日数 あ001    6    100 い002    10   20 という結果を表示させるにはどのような関数を組んだらよいでしょうか? 当方初心者ですので、不足な情報等ございましたらご指摘ください。 よろしくお願いいたします。

  • MicroSoft Access2000で複数のテーブルの中にある必要

    MicroSoft Access2000で複数のテーブルの中にある必要なデーター選んで一つ表にまとめる方法を教えてください。 ・テーブル1は商品名、商品コード、棚番号のデーター ・テーブル2は商品名、単価 ・テーブル3は商品名、在庫数 これら全てのデーターを新しいテーブルに一つの表するにはどのようにしたら良いのでしょうか? Accessは使ったことが無く初めて目にする超初心者の私にでも分かる位のレベルで教えてください。 (クリエとかテーブル等の役割や意味も分からないです) 他に頼れる人はいないので自分自身で何とかするしかありません。

  • accessの使い方

    関連書籍を読みアクセスを勉強しているのですが、 いまいちよくわからないことがあります。 「商品情報」、「7月商品」というテーブルを作り、在庫管理をしたいと思っています。 「商品情報」には商品コード、仕入先1、単価1、仕入先2、単価2があり、 「7月商品」には商品コード、仕入先、単価、仕入数、在庫があります。 「7月商品」の入力用フォームを作り、商品コードはコンボボックスを使って「商品情報」の商品コードから選べるようになっています。 「7月商品」で商品コードを選んだ時に、「7月商品」の仕入先をその商品コードの仕入先1,仕入先2から選べるようにしたいのですがどうしたらいいでしょうか? また選んだ仕入先の単価が適用されるようにしたいと思います。 <例> 「商品情報」 001,商品1,A社,100,B社,110 002,商品2,C社,200,D社,210 「7月商品」の入力フォームで商品コードをコンボボックスの中から001を選ぶと、(ここまではできました) 仕入先にA社かB社が選べ、 A社を選ぶと単価に100が、B社を選ぶと単価に110が適用される。

  • 商品テーブルと2つの在庫テーブルの結合ができない

    商品のデータベースがあるんですが、一つの商品テーブルに複数の店舗の商品をまとめて登録しています。在庫数は店舗別のテーブルで分けているのですが、これをSQLで商品コードで結合ができません。 仮に商品がA、B、Cと登録されていたとして、店舗1にはAとBの商品があるため2つの在庫数を設定しており、店舗2にはBとCの商品があるため2つの在庫数を設定しています。 つまり片方のみの商品もあれば両方に存在する商品があります。 このときにSQLで商品情報を取得する場合に、結合したいのですが結果が0件となり上手く結合ができません。 商品コードがBのときにSELECT文で両店舗の在庫数を同時に取得したいし、AやCではそれぞれの店舗在庫を取得したいのですが、何か良い方法はないものでしょうか?

    • ベストアンサー
    • MySQL
  • EXCEL 名前を特定しないで在庫増減する方法

    こんにちは。EXCELで在庫表を動かす関数とマクロを組んでおりますが、つまずいてしまいました。 どうか皆様の知恵をお貸し願えたらと思います。 現在、(画像上)のように、JANコードでまとめた店別の商品在庫表があります。 各店から、在庫の+-をあらわすCSVデータ(画像中央)が送られてくるのですが、これをEXCELに取り込み、JANコードをキーにして、+-の数値を在庫表に反映させ、(画像下)のようにしたいと思っています。 ちなみに「数量」の項目はいつも必ず1です。 「増減」で+-をあらわしています。 (りんごが3つ減ったら、増減「-」数量「3」ではなく、「-」「1」が3つ並んでデータに表示されます) ですが、ここで問題が出てきてしまいました。 サンプル画像は商品もJANコードも3種類しかありませんが、実際には1000種類以上の商品があり、在庫表のデータベースももっと縦に長くなっています。 商品の数が少なくて、売れるものも毎日決まっていれば、VLOOKUPやCOUNTIF関数で「りんごのマイナスは何個」と指定して数量を抜き出すことができますが、毎日ちがう商品のデータが何種類も入ってくるため、「りんご」「みかん」といちいち指定して抜き出す手間がかけられません。 JANコードを軸にして、毎回ほぼランダム同然に送られてくる商品の在庫数を一度に表に変換できないものでしょうか。 いろいろ関数の組み合わせや作業プロセスを考えてみましたが、多くの関数は、特定の"名前"を指定して、数を抜き出すものなので、なかなかうまくいかずに困っています。 また大変恐縮ですが、マクロでワンタッチでできるようにしたいと思っているので、良いコードがあれば教えていただきたいと思っています。 どうかよろしくお願い致します。

  • ネットモールでの特定商取引の表示について

    ネットモールを現在するため、現在準備中です。 私たちは決済を代行し、商品の出品、発送は直接出品者から行ってもらう形態です。 こういった場合、特定商取引に関する表示は、出品者ごとに表示してもらう必要があるのでしょうか。 それとも、私たちネットモール運営者の情報だけでよいのでしょうか。 ご教示お願いいたします。