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

phpとperlのプログラムについての質問です。
あるシステム案件を複数人で担当することになり、当方がphpでプログラムを書き、相手方がperlでプログラムを書く必要性が出てきました。そのためそれぞれの言語内で同じ目的の処理が必要になった場合に、同じ処理を2回書くのは無駄なので相手方がAPIを実装してそれを使ってもらえればいい、という話になりました。

JSONなどでデータを取り出すタイプのAPIなら(twitterのAPIとか)使ったことがあるのですが、同一サーバー内においてAPIを経由して異言語間でやりとりしたことがありません。

phpでAPIを叩く、というとfile_get_contents関数を連想するのですが、ここの取得先のファイル名に同一サーバー内の特定のファイル名を相対パスで書いた場合、それを実行してその結果を取得するのではなくそのファイルの中身を当然取ってきてしまいます。実際同一サーバー内に設置されたapiを叩いて結果を取得するにはphpにおいてはどの関数をどのように使うべきなのでしょうか。

以上、お手数ですが詳しい方にご回答いただけますと幸いです。

●質問者: n_maco2
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:API JSON Perl PHP くそ
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● niwa-mikiho
●31ポイント

API と言っても、所詮は HTTP によるデータのやりとりなので、

クライアントは post なりで要求だして、API 側は print するだけです。

そのやりとりするデータの構造を考えるのがプログラマ側ですので、

やりとりしたいデータを既存の技術にあてはめて、扱いやすいものを選べばいいかと思います。


簡単に言えば 「フォーマットは自分たちで決める」 です。


同一サーバー内のファイルだからといってそのまま実行するのではなく、

ちゃんと HTTP 経由でアクセスしてあげれば希望の動作かと思います。

◎質問者からの返答

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

http経由のアクセスをあえて行う、ということですね。確かにそれであれば、諸々やりやすいかと思います。

しかしhttp経由ということは、インターネット上にデータをさらすことになってしまい、余計なセキュリティの問題が発生したり、Writeやdeleteなどのselect以外の命令を渡したいときに結構面倒になるかな、と感じます。

そこらへんはどのように思われますでしょうか。何かアイデアがあればお教えください。

よろしくお願いいたします。


2 ● ホーエンハイム
●42ポイント ベストアンサー

どのレベルでAPIを組むのか、perl担当の方とよく相談する必要がありますね。


PHPでperlスクリプトとの間でプロセス間通信するのであれば、popenがよく使われます。

それ以上の規模のデータの授受が発生するのでしたら、jsonを使った方が楽だと思います。

◎質問者からの返答

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

popenを試させて頂きました。非常に希望している動作に近く、かつ楽にコードを書くことができました。

シンプルでとてもいいと思います。

JSONのほうの話になりますが、JSONはあくまでデータ形式の一つだと理解しております。Bombastusさんがおっしゃってるのは、上記のpopenの実行結果、つまりAPIを叩いた結果の文字列をJSON形式のデータで受け取るべきだ、という意味でしょうか。それともJSON専用の何かしらの関数があったりするものなのでしょうか。

以上、よろしくお願いいたします。


3 ● 小力子象
●0ポイント

JSON (JavaScript Object Notation)は、軽量のデータ交換フォーマットです。人間にとって読み書きが容易で、マシンにとっても簡単にパースや生成を行なえる形式です。 JavaScriptプログラミング言語 (ECMA-262標準第3版 1999年12月)の一部をベースに作られています。 JSONは完全に言語から独立したテキスト形式ですが、C、C++、C#、Java、JavaScript、Perl、Python、その他多くのCファミリーの言語を使用するプログラマにとっては、馴染み深い規約が使われています。これらの性質が、 JSONを理想的なデータ交換言語にしています。

◎質問者からの返答

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

しかし質問に対する答えではないです。


4 ● ホーエンハイム
●22ポイント

JSONのほうの話になりますが、JSONはあくまでデータ形式の一つだと理解しております。

はい、データ形式という解釈で結構です。


PHP側ではjsonデコード関数json_decodeとエンコード関数json_encodeが用意されているので、より大規模な構造化されたデータを扱う場合には便利です。

◎質問者からの返答

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

この関数は知りませんでした、勉強になります、ありがとうございます。


5 ● b-wind
●38ポイント

しかしhttp経由ということは、インターネット上にデータをさらすことになってしまい、余計なセキュリティの問題が発生したり、Writeや deleteなどのselect以外の命令を渡したいときに結構面倒になるかな、と感じます。

別に http で無くともインターネット越しにアクセスすることは変わりない。

file_get_contents でもやっていることは同じ。

HTTPS の利用や Basic 認証・Digest 認証を組み合わせればそれなりのセキュリティは担保できる。

(もっと必要であればそもそもVPNで接続した経路でしかつながない等)


言語をまたがったデータのやりとりは SOAP や XML::RPC 等いくつかあるが XML をベースにした物はオーバーヘッドが高く最近は利用されなくなっている。

結局自分たちで使用するだけのAPIならプロトコルは自分で決めてしまえばよいのでデータ形式に JSON を使うのは理にかなっているし、メリットも多い。


なにを出来ればよいのかがご自分でもまだよく分かっていないように見える。

たとえば、PHP から perl 側の関数を呼び出したい場合、

$json_obj = file_get_contents('https://user:password@api.example.com/api.pl?arg1=aaaa&arg2=bbbb');
$json = new Services_JSON();
$data = json->decode($json_obj);
print_r($data);

PHPでJSON - Do You PHP?

等としてやればよい。

呼ばれている perl スクリプトが中で何をやっているのかは PHP 側で知る必要は無いし、知らなくても

使えるようにした物を API と呼んでいるだけなので。

◎質問者からの返答

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

引数だけ渡して後はperl側で、ということですね。一般的なWebAPIによくあるパターンのように見えます。

心配してた「セキュリティの問題」はただの杞憂だということが他にいただいたご回答で解決しました。

httpsと認証加えれば大丈夫そうですね。ありがとうございます。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



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