ネットワークプログラミングとAPIについて ネットワークプログラミングとAPIについて ネットワークプログラミングをしていて、サーバー側の作成をしてました。

ネットワークプログラミングとAPIについて ネットワークプログラミングとAPIについて ネットワークプログラミングをしていて、サーバー側の作成をしてました。 socketを用いたTCP C/S通信等の初歩的なプログラミングならわかるのですが、いざAPIを作ろうとした際にどのようにしたらいいのかわからず困っています。(APIというものの設計をしたことがないので....) 例えば、クライアント側に int SendLocation(x,y); というようなint型の引数をふたつとり返り値がint、のライブラリを提供し、これを実行するとサーバー側がx,yというint型の値を受け取り、処理をして返すというような処理を行いたいです。 このint SendLocation(x,y)というものの作り方がわかりません。 どうか優しいご指摘をお願いいたします 使用言語はRubyです。

プログラミング | C言語関連190閲覧xmlns="http://www.w3.org/2000/svg">25

ベストアンサー

このベストアンサーは投票で選ばれました

1

下記説明は、御存知のこともあるでしょうが、説明の便宜上、順番に説明します。 [ネットとインターネットの違い] 「ネットワークプログラミング」とか「ネットゲーム」等の言葉における「ネット」とは、インターネットを指している訳ではないです。 正確に言い直せば、「ネット」と言った場合は、インターネットだけとは限らず、インターネット以外の通信方式も含みます。 つまり、「ネット」と言う場合は、インターネット関係を含みますが、それだけではなく、インターネットが普及する前から存在するTCP/IPと言う通信方式なども含みます。 すなわち、「ネット」とは、各種通信方式による通信の全般を指しています。 [非インターネット仕様の通信方式と、インターネット仕様の通信方式] <TCP/IP> インターネットが普及する前から存在する通信方式の代表的なものに、TCP/IPと言う通信方式があります。 TCP/IPと言う通信方式を使って、実際に通信プログラムを作る機能として、ソケットと言う技術機能があります。 ソケット(TCP/IP)は、もともとC言語やC++を使ってプログラミングが行なわれていました。 しかし今は、Java や C# 等々の様々なプログラミング言語で使われています。 <Http> インターネット仕様の通信方式は、何種類もありますが、代表的なものにHttpがあります。 インターネットの通信方式でのシステムを作る場合は、Java や C# 等のインターネット仕様を取り込んだプログラミング言語がよく使われます。 <インターネット系と非インターネット系の使い分け> インターネットは、広く普及していて、IT全般において主要な位置にあります。 インターネットは、各種企業や、各個人に、広く発信が行なえる通信だからです。 しかし、何でもインターネット系にすればよいとは限りません。 例えば、銀行や郵便局のシステムは、様々な人から広くアクセスされたら困ります。 どんどんと御金が盗まれてしまいます。 よって、銀行のシステム等は、非インターネット系(TCP/IP)が使われています。 [システムのエクスポート] ソケットで作る通信用プログラムでは、データー(情報)の通信だけで、関数と言った機能での通信が行なえません。 よって、サーバーの機能を実行させるには、データー(情報)にコマンド(命令)を割り振ります。 例えば、クライアントからサーバーに"RESET"と言う文章が送られてきたら、サーバー内の情報をリセットする、と言った取り決めを行ないます。 しかし、上記の作業は、大変ですので、関数と言う形で通信を行なえる機能もあります。 「分散システム」と呼ばれるものは、関数と言う形で通信が行なえます。 もともと分散システムと言うものは、名前の通り、サーバーシステムを分散させるものです。 すなわち、大規模コンピューターでは、メンテナンスが大変なので、中規模なコンピューターを複数個で分担させるものです。 しかし、ここでは、サーバーシステムを作る本格的な機能と解釈して下さい。 分散システムは、何種類もありますが、代表的なものにCORBAがあります。 CORBAは、C++やJava等の幾つかのプログラミング言語がサポートされているので、広く普及しました。 [インターネット系の分散システム] 前述のCORBAは、主にTCP/IPでの通信です。 そこで、インターネット系の分散システムの活用が可能なように、通信方式自体(プロトコル自体)が新規に作られました。 SOAPと言うプロトコルです。 SOAP は、IBM、Oracle、Microsoft 等の企業が手を組んで作られました。 SOAP は、機能を通信することも考慮された通信方式です。 なお、SOAP で、通信プログラムを作る技術機能は、「Webサービス」と言います。 2002年からスタートしましたが、一般ユーザー向けのシステムでは、普及に失敗しました。 しかし、企業向けのビジネス系システムでは、成功して、今まで成長を続けました。 ただし、2010年にOracle が、反発していたSun社を買収したことを切っ掛けに、一般向けのリベンジが始まりだしました。 このままクラウドコンピューティングの重要度が上がって来ると、インターネット系の分散システムが、主流になって行く可能性があります。 普及しなくても、今から活用したい場合は、C# でWCF と言う分散システムを使います。 もしくは、Eclipse と言う統合開発環境で、MVC と言うモデルの開発環境を使って下さい(Eclipse のMVC 開発環境は、何種類か存在します)。

1人がナイス!しています

TCP/IP は、インターネット系の通信方式の元祖的な存在なので、「TCP/IP を非インターネット」と言う表現を使うと、変に聞こえる人もいるかも知れません。 しかし、TCP/IP は、インターネットが普及する前から存在する通信方式です。 インターネット系の各種通信方式が、多種の相手と通信して行くのに対して、TCP/IP は、特定の相手と通信をします。 例えば、銀行の本体システムと、ATM の接続は、TCP/IP を使います。 また、銀行の本体システムと、証券取引所の接続は、TCP/IP を使います。 あと、御金や企業情報などを扱う、本店と支店を接続するシステムなど。

その他の回答(2件)

0

おや、RubyでWebサービスのAPIを作りたいとか、、 Rubyなら、Webサービスの実装側と、それを利用するクライアント側のコードとを合わせて、30行程度で作れるのに、、 それは、「百メートルの通信なら、エレベータで高いところに上がって、手旗信号で、通信するのが簡単ジャ」みたいな簡単さです。 下記のコードだけで、「サーバ側でWEBサービスのAPIを実行するスレッドが待機し、1対多での通信」ができます。 <routes.rb> get 'calc2num/:num1/:num2' => 'calc2num#getnum' get 'websvcall/:num1/:num2' => 'websvcall#calc2numcall' <calc2num_Controller.rb> サーバ側のコード class Calc2numController < ActionController::Base protect_from_forgery with: :null_session def getnum retVal= Hash["value",(params[:num1].to_i) + (params[:num2].to_i)] puts JSON.pretty_generate(retVal) render :json => retVal end end <Websvcall_Controller.rb > クライアント側 つまり「int SendLocation(x,y)」に相当するコードは、 require 'net/http' class WebsvcallController < ActionController::Base protect_from_forgery with: :null_session def calc2numcall pnum1=params[:num1] pnum2=params[:num2] uri = URI.parse "http://#{request.host_with_port}" Net::HTTP.start(uri.host, uri.port) {|http| resText = http.get("/calc2num/#{pnum1}/#{pnum2}") } render :text => "cal2num responce=" + resText end end だた、Ruby on railsが動く環境を作るのには、”高いビルに上る”程度の苦労はいるものですが、それも、色々なgemの構成要素の安定バージョンの組み合わせを検証済みでワンタッチ・インストーラを提供しているサイトからダウンロードすると簡単です。 https://bitnami.com/stack/ruby/installer 以上

abiko_tetuさん 半年前に、知恵袋への質問に先立つコト半年(つまり1年前)から学習を始めて、ソレナリにプログラミングに熱意はあって2百行位のコードまで作りかけて挫折させた質問者への回答の後、貴方は回答者として、何か成長はありましたか? http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11139313786 「<C#> 簡易Webサーバーの基礎的サーバー作成 < マルチスレッド対応(暫定版)>」 「今日日、自動車を運転するのに、歯車のギア比とか、トロコイド (trochoid) 曲線の”基礎”から学ぶ”必要”は無くなっているのですよ」。 もし、貴方が「何事も”基礎”を学ぶことは”必要”(という恐怖感をバラマク)、かつ、何時も実践している」と言われるなら、下記のタッタの百行のコードを「歯車が噛み合って滑らかに回る」ようにデバックする等、お手前を拝見したいものです。 http://www.playmycode.com/play/game/manygods800/gear-rack-and-pinion

0

twitterなどのWeb APIを調べて参考にすればいいでしょう。 # TCP/IPが「非インターネット系」って…