Difference between revisions of "Networking/ja"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; removed categories included in template)
 
(19 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
{{Networking}}
 
{{Networking}}
 
  
 
{{Japanese Menu}}
 
{{Japanese Menu}}
  
このページは、Lazarusでのネットワークプログラムについてのチュートリアルを開始するページになるでしょう。
+
このページは、Lazarus と 平易な FPC を用いたネットワークプログラムについての情報とチュートリアル/コードのページです。
この記事に、リンクやセクション、ページ、あなたのWikiへのリンクを追加していってください。(訳注:最初にこの元記事を書いた人はネットワークプログラミングの専門でなく、独学で勉強したことを書いているそうです。)
 
  
このページには、一般的な情報があります。
+
(訳注:最初にこの元記事を書いた人はネットワークプログラミングの専門でなく、独学で勉強したことを書いているそうです)
  
__TOC__
+
== TCP/IP プロトコル ==
== その他のネットワークのチュートリアル ==
 
  
* [[:fpc:Secure programming | セキュア・プログラミング]]  
+
{{Note|FPC/Lazarus には、ネットワーキングの機能を使うための様々なライブラリ(Synapse, lnet, fphttpclient, Indy,...)があるため、それらのライブラリに対して多くのサンプルコードが記述できるでしょう。 したがって、異なるライブラリに対しても同じサンプルコードを何度もみることになるかもしれません。 複数のネットワークライブラリの使用が可能なフレームワークの作り方の例について、 [http://brookframework.org] や [https://bitbucket.org/reiniero/fpctwit] フレームワークもご参照ください}}
  
* [[Sockets]] - TCP/IP ソケットコンポーネント
+
=== CGI/FastCGI - REST, CRUD, チャットやブログ、ウェブページなど ===
  
* [[lNet]] - 軽量ネットワークコンポーネント
+
これらの機能は [[fcl-web]] を使うことで可能となります。 また、 Brook フレームワーク( [http://silvioprog.github.io/brookframework this page] )でも実装されています。
  
== TCP/IP Protocol ==
+
=== SSH/Telnet クライアント、メールの送信、ファイルのダウンロードや OAuth v1.0 の例 ===
 +
[[Synapse]]のページをご覧ください。
  
== XML ==
+
=== Webサーバの例 ===
  
XML(=The Extensible Markup Language)とは、[http://www.w3.org/ W3C] が推奨する異なるシステム間での情報のやりとりをするための言語です。
+
以下は Synapse ライブラリを用いて記述した http サーバの例です。Mac OS Xでテストしました。ただし、Mac OS Xの socket ユニットでは定数 MSG_NOSIGNAL が定義されていないため、Synapse のソースに定数定義 MSG_NOSIGNAL = $20000 を追加してコンパイルしました(訳注 : 2010年9月現在SVNで流れている Synapse の新バージョンでは、上記の定数が追加されており、無修正でコンパイルできます)。
これは、情報を保存するために、テキストを基本とする方法です。最近のXHTMLのようなデータ交換方法はWebサービス技術などでもよく使われていますが、それらは、XMLを基礎としています。
 
  
現在、Lazarus上では、XMLをサポートするユニット(群)があります。
+
<syntaxhighlight lang=pascal>
これらのユニットは、"XMLRead", "XMLWrite" そして "DOM"と呼ばれていますが、これらは、FreePascalCompilerからの、FCLの一部になっています。
+
{
 +
  マイクロ Pascal ウェブサーバ
 +
 +
  Synapseライブラリを用いた極単純なウェブサーバの実装例である。
 +
 +
  ブロッキングモードのソケットを用いた単一スレッドアプリケーションであるため
 +
  複数のリクエストを並行して処理することはできない。
  
FCLライブラリはすでにLazarusのデフォルトの検索パスにはいっていますので、それらのユニットをusesするようにすれば、XMLの機能を享受できます。FCLは現在(October / 2005)のところ、文書化されていません。
+
  ブラウザから受け取ったヘッダは標準出力に出力される。
ですから、このチュートリアルでは、これらのユニットをつかって、XMLアクセスの方法をご紹介することにしましょう。
 
  
XMLのDOM (Document Object Model)は、異なるシステム間でXMLを利用するための同じようなインターフェースを提供する、標準化されたオブジェクトの集合です。
+
  サービス可能なウェブページのURIは固定で、'/' のみである。
 +
  ほかのURIに対しては '504 not found' を返す。
 +
}
 +
program upserver;
  
オブジェクトの標準化といっても、メソッド、プロパティ、オブジェクトの他へのインターフェースパーツのみで、異なる言語や実装といった要素は除去されています。
+
{$ifdef fpc}
FCLは現在、完全に[http://www.w3.org/TR/1998/REC-DOM-Level-1-19981001/|XML DOM 1.0]をサポートしています.
+
  {$mode delphi}
 +
{$endif}
  
(訳注:XML,DOMを「完全に」パースする、という実装は、かなり大変なことです。また、異機種間での利用を目的に作られていることに注意しましょう。Lazarusは、クロスコンパイル環境であり、これを標準で持っている事は、とても便利に快適にプログラムが出来ると思われます。日本語がどこまで検証されているのか、というところは、訳からはちょっと分かりませんが...。)
+
{$apptype console}
  
 +
uses
 +
  Classes, blcksock, sockets, Synautil, SysUtils;
  
=== 基本的な例 ===
+
{@@
 +
  コネクションに参加する。ヘッダを読み、しかるべき返信を行う
 +
}
 +
procedure AttendConnection(ASocket: TTCPBlockSocket);
 +
var
 +
  timeout: integer;
 +
  s: string;
 +
  method, uri, protocol: string;
 +
  OutputDataString: string;
 +
  ResultCode: integer;
 +
begin
 +
  timeout := 120000;
  
たとえば、'C:\Programas\teste.xml'といったXMLファイルにアクセスしてみたいとしましょう。
+
  WriteLn('Received headers+document from browser:');
このファイルは次のようなものだとします:
 
  
<code>
+
  //リクエストラインを読み込む
<?xml version="1.0" encoding="ISO-8859-1"?>
+
  s := ASocket.RecvString(timeout);
<images directory="mydir">
+
  WriteLn(s);
   <imageNode URL="graphic.jpg" title="">
+
   method := fetch(s, ' ');
    <Peca DestinoX="0" DestinoY="0">Pecacastelo.jpg1.swf</Peca>
+
  uri := fetch(s, ' ');
    <Peca DestinoX="0" DestinoY="86">Pecacastelo.jpg2.swf</Peca>
+
   protocol := fetch(s, ' ');
   </imageNode>
 
</images>
 
</code>
 
  
次のコードはノード名をフォーム上のTMemoに書き出す例です。
+
  //リクエストヘッダを読み込む
 +
  repeat
 +
    s := ASocket.RecvString(Timeout);
 +
    WriteLn(s);
 +
  until s = '';
  
<code>
+
   // ここで出力ストリームに文書を書き込む
var
+
 
   Documento: TXMLDocument;
+
   if uri = '/' then
  i, j: Integer;
 
begin
 
   Documento := TXMLDocument.Create;
 
  ReadXMLFile(Documento, 'C:\Programas\teste.xml');
 
  Memo.Lines.Clear;
 
  with Documento.DocumentElement.ChildNodes do
 
 
   begin
 
   begin
     for i := 0 to (Count - 1) do
+
     // 出力する文書をストリームに書く
    begin
+
    OutputDataString :=
       Memo.Lines.Add(Item[i].NodeName + ' ' + Item[i].NodeValue);
+
      '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
      for j := 0 to (Item[i].ChildNodes.Count - 1) do
+
       + ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + CRLF
      begin
+
       + '<html><h1>Teste</h1></html>' + CRLF;
        Memo.Lines.Add(Item[i].ChildNodes.Item[j].NodeName + ' '
 
        + Item[i].ChildNodes.Item[j].NodeValue);
 
       end;
 
    end;
 
  end;
 
  Documento.Free;
 
end;
 
</code>
 
  
=== TreeViewにXMLを表現する ===
+
    // ヘッダをクライアントに返信する
 +
    ASocket.SendString('HTTP/1.0 200' + CRLF);
 +
    ASocket.SendString('Content-type: Text/Html' + CRLF);
 +
    ASocket.SendString('Content-length: ' + IntTostr(Length(OutputDataString)) + CRLF);
 +
    ASocket.SendString('Connection: close' + CRLF);
 +
    ASocket.SendString('Date: ' + Rfc822DateTime(now) + CRLF);
 +
    ASocket.SendString('Server: Servidor do Felipe usando Synapse' + CRLF);
 +
    ASocket.SendString('' + CRLF);
  
XMLファイルの一般的な利用のひとつに、ツリー形式に構文を解析して、内容を表示することです。 Lazarusの上の「Common Control」タブに、ツリー形式に表示するためのTTreeViewコンポーネントがあります。
+
  //  if ASocket.lasterror <> 0 then HandleError;
  
以下での機能は、あらかじめファイルからロードされたか、コードで作られたXMLドキュメントを取得し、コンテンツの内容をTreeViewに表示します。
+
    //文書をブラウザに送信する
それぞれのノードのキャプションは、それぞれの(XMLの内容の)最初の属性になるでしょう。
+
    ASocket.SendString(OutputDataString);
 +
  end
 +
  else
 +
    ASocket.SendString('HTTP/1.0 504' + CRLF);
 +
end;
  
<pre>
 
procedure TForm1.XML2Tree(tree: TTreeView; XMLDoc: TXMLDocument);
 
 
var
 
var
   iNode: TDOMNode;
+
   ListenerSocket, ConnectionSocket: TTCPBlockSocket;
 
+
begin
   procedure ProcessNode(Node: TDOMNode; TreeNode: TTreeNode);
+
   ListenerSocket := TTCPBlockSocket.Create;
  var
+
   ConnectionSocket := TTCPBlockSocket.Create;
    cNode: TDOMNode;
 
   begin
 
    if Node = nil then Exit; // Stops if reached a leaf
 
   
 
    // Adds a node to the tree
 
    TreeNode := tree.Items.AddChild(TreeNode, Node.Attributes[0].NodeValue);
 
  
    // Goes to the child node
+
  ListenerSocket.CreateSocket;
    cNode := Node.ChildNodes.Item[0];
+
  ListenerSocket.setLinger(true,10);
 +
  ListenerSocket.bind('0.0.0.0','1500');
 +
  ListenerSocket.listen;
  
    // Processes all child nodes
+
  repeat
     while cNode <> nil do
+
     if ListenerSocket.canread(1000) then
 
     begin
 
     begin
       ProcessNoDe(cNode, TreeNode);
+
       ConnectionSocket.Socket := ListenerSocket.accept;
       cNode := cNode.NextSibling;
+
      WriteLn('Attending Connection. Error code (0=Success): ', ConnectionSocket.lasterror);
 +
       AttendConnection(ConnectionSocket);
 
     end;
 
     end;
   end;
+
   until false;
   
 
begin
 
  iNode := XMLDoc.DocumentElement.ChildNodes.Item[0];
 
  while iNode <> nil do
 
  begin
 
    ProcessNode(iNode, nil); // Recursive
 
    iNode := iNode.NextSibling;
 
  end;
 
end;
 
</pre>
 
  
=== XML文書を更新する ===
+
  ListenerSocket.Free;
まず最初に覚えていただきたいのが、TDOMDocumentがDOMへの「ハンドル」であるということです。
+
  ConnectionSocket.Free;
あなたはこのクラスのインスタンスを、生成するか、XML文書をロードすることで取得できます。
+
end.
 +
</syntaxhighlight>
  
一方、通常のオブジェクトのようにノードを生成することはできません。 ノードを作成するためには、TDOMDocumentで提供されている方法、または、他の方法として、ツリー構造の上の正しい場所に設定する方法を使用しなければなりません。 この理由は、ノードがDOMの上の、ある特定のドキュメントによって「所有」されなければならないからです。
 
  
下記は、TDOMDocumentの共通のメソッドです。
+
=== FPC に備え付けの fcl-net コンポーネントを用いた TCP/IP クライアント-サーバ の例 ===
  
<pre>
+
[http://pascalgeek.blogspot.com/2012/06/encryption-decryption-and-asynchronous.html ブログ記事における例]をご覧ください。
  function CreateElement(const tagName: DOMString): TDOMElement; virtual;
 
  function CreateTextNode(const data: DOMString): TDOMText;
 
  function CreateCDATASection(const data: DOMString): TDOMCDATASection;
 
    virtual;
 
  function CreateAttribute(const name: DOMString): TDOMAttr; virtual;
 
</pre>
 
  
ここで、TTreeViewに選択された項目の場所に、XML文書の子ノードを挿入する例を示します。
+
=== HTTP ページのダウンロードや POST を用いたウェブサーバへのアップロード、external IP アドレスの取得 ===
[[Networking#Populating a TreeView with XML|XML2Tree function]]を使うことによって、TreeViewはXMLファイルの内容を完全に表現できていなくてはなりません。
 
  
<pre>
+
これらの例は、 [[fphttpclient#Examples]] で見つかります(FPC/Lazarus に備え付けの fphttpclient コンポーネントを使用した例です)
procedure TForm1.actAddChildNode(Sender: TObject);
 
var
 
  Posicao: Integer;
 
  NovoNo: TDomNode;
 
begin
 
  {*******************************************************************
 
  *  Detects the selected element
 
  *******************************************************************}
 
  if TreeView1.Selected = nil then Exit;
 
  
  if TreeView1.Selected.Level = 0 then
+
== Webサービス ==
  begin
 
    Posicao := TreeView1.Selected.Index;
 
  
    NovoNo := XMLDoc.CreateElement('item');
+
[http://www.w3.org/ W3C] によると、 Web サービスとは ネットワーク越しに機械と機械を相互に利用できるように設計されたソフトウェアの名称です。
    TDOMElement(NovoNo).SetAttribute('nome', 'Item');
 
    TDOMElement(NovoNo).SetAttribute('arquivo', 'Arquivo');
 
    XMLDoc.DocumentElement.ChildNodes.Item[Posicao].AppendChild(NovoNo);
 
  
    {*******************************************************************
+
Web サービスは、 WSDL などのように 「機械が処理可能」 な形式で記述されているインタフェースを持ちます。 そのほかのシステムは、SOAP エンベロープに含まれるメッセージを使用したインタフェースによって定められた方法で、ウェブサービスと対話します。もしくは、RESTの原則に従うかもしれません。
    *  Updates the TreeView
+
これらのメッセージは、一般的に HTTP を使用して伝達され、普通は他のウェブに関する規格と共同した XML から構成されています。
    *******************************************************************}
 
    TreeView1.Items.Clear;
 
    XML2Tree(TreeView1, XMLDoc);
 
  end
 
  else if TreeView1.Selected.Level >= 1 then
 
  begin
 
    {*******************************************************************
 
    *  This function only works on the first level of the tree,
 
    *  but can easely modifyed to work for any number of levels
 
    *******************************************************************}
 
  end;
 
end;
 
</pre>
 
  
== WebServices ==
+
様々なプログラミング言語で書かれ、様々なプラットホームで動くソフトウェアアプリケーションであっても、 Web サービスを利用することで、一つのコンピュータにおける内部処理と同様な方法でインターネットのようなコンピュータネットワーク越しでも、データの交換が可能になります。
  
According to the [http://www.w3.org/ W3C] a Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface that is described in a machine-processable format such as WSDL. Other systems interact with the Web service in a manner prescribed by its interface using messages, which may be enclosed in a SOAP envelope, or follow a REST approach. These messages are typically conveyed using HTTP, and are normally comprised of XML in conjunction with other Web-related standards. Software applications written in various programming languages and running on various platforms can use web services to exchange data over computer networks like the Internet in a manner similar to inter-process communication on a single computer. This interoperability (e.g., between Windows and Linux applications) is due to the use of open standards. OASIS and the W3C are the primary committees responsible for the architecture and standardization of web services. To improve interoperability between web service implementations, the WS-I organisation has been developing a series of profiles to further define the standards involved.
+
この相互運用性 (例えば、WindowsとLinuxアプリケーションの間など) はオープンな規格によってもたらされました。 OASIS W3C は Web サービスのアーキテクチャと標準化に関して信頼できる主要な委員会です。
 +
また、 Web サービス実装間の相互運用性を改良するため、 WS-I 組織は、さらなる関連する標準を定義するために、一連のプロファイルを開発しています。
  
=== Web Service Toolkit for FPC & Lazarus ===
+
=== FPC & Lazarus のための Web サービスツールキット ===
[[Web Service Toolkit]] is a web services package for FPC and Lazarus.
+
[[Web Service Toolkit]] FPC Lazarus のための WEBサービス のパッケージです。
  
== External Links ==
+
== 以下もご参照ください ==
 
+
* [[Portal:Web Development|Web Development Portal]]
'''XML'''
+
* [[Networking libraries|ネットワーキングライブラリ]] - 各種ネットワーキングライブラリの比較
 
+
* [http://brookframework.org Brook Framework] - 完全な Free Pascal による Web アプリケーションのためのフレームワークです。 純粋な Pascal からできており、Pascal ではない言語に悩まされる必要はありません。
* [http://www.w3schools.com/xml/default.asp W3Schools] Xml Tutorial
+
* [http://www.fastplaz.com FastPlaz] - Pascal のための Fast Web フレームワークです。 特徴として、theme/templating や simple Model、 セッション、メーラー などなど。
 +
* [[Sockets]] - TCP/IP ソケットコンポーネント
 +
* [[fcl-net]] - FPC に備え付けのネットワーキングライブラリ
 +
* [[Indy_with_Lazarus/ja]] - 多くの機能を持つネットワーキングライブラリのインストール方法
 +
* [[lNet]] - 軽量ネットワークコンポーネント
 +
* [[Synapse]] - シリアルポートとSerial port and synchronous TCP/IP ライブラリ
 +
* [[XML Tutorial/ja]] - XML はしばしばネットワーク通信で用いられます
 +
* [[FPC and Apache Modules]]
 +
* [[fcl-web]] - fpWeb という名前でも知られており、 cgi や fastcgi、apache のモジュールからなる Web アプリケーションを作るためのライブラリです。
 +
* [[Secure programming | セキュア・プログラミング]]
 +
* [[Internet Tools]] - Synapse/wininet/Android's httpcomponents simplifying https and redirections や ダウンロードされたページを処理するための XPath/XQuery/CSS セレクタ/JSON のエンジン などのラッパー

Latest revision as of 10:08, 21 February 2020

Deutsch (de) English (en) español (es) français (fr) 日本語 (ja) 한국어 (ko) polski (pl) português (pt) русский (ru) slovenčina (sk) 中文(中国大陆)‎ (zh_CN)

日本語版メニュー
メインページ - Lazarus Documentation日本語版 - 翻訳ノート - 日本語障害情報

このページは、Lazarus と 平易な FPC を用いたネットワークプログラムについての情報とチュートリアル/コードのページです。

(訳注:最初にこの元記事を書いた人はネットワークプログラミングの専門でなく、独学で勉強したことを書いているそうです)

TCP/IP プロトコル

Light bulb  Note: FPC/Lazarus には、ネットワーキングの機能を使うための様々なライブラリ(Synapse, lnet, fphttpclient, Indy,...)があるため、それらのライブラリに対して多くのサンプルコードが記述できるでしょう。 したがって、異なるライブラリに対しても同じサンプルコードを何度もみることになるかもしれません。 複数のネットワークライブラリの使用が可能なフレームワークの作り方の例について、 [1][2] フレームワークもご参照ください

CGI/FastCGI - REST, CRUD, チャットやブログ、ウェブページなど

これらの機能は fcl-web を使うことで可能となります。 また、 Brook フレームワーク( this page )でも実装されています。

SSH/Telnet クライアント、メールの送信、ファイルのダウンロードや OAuth v1.0 の例

Synapseのページをご覧ください。

Webサーバの例

以下は Synapse ライブラリを用いて記述した http サーバの例です。Mac OS Xでテストしました。ただし、Mac OS Xの socket ユニットでは定数 MSG_NOSIGNAL が定義されていないため、Synapse のソースに定数定義 MSG_NOSIGNAL = $20000 を追加してコンパイルしました(訳注 : 2010年9月現在SVNで流れている Synapse の新バージョンでは、上記の定数が追加されており、無修正でコンパイルできます)。

{
  マイクロ Pascal ウェブサーバ
 
  Synapseライブラリを用いた極単純なウェブサーバの実装例である。
 
  ブロッキングモードのソケットを用いた単一スレッドアプリケーションであるため
  複数のリクエストを並行して処理することはできない。

  ブラウザから受け取ったヘッダは標準出力に出力される。

  サービス可能なウェブページのURIは固定で、'/' のみである。
  ほかのURIに対しては '504 not found' を返す。
}
program upserver;

{$ifdef fpc}
  {$mode delphi}
{$endif}

{$apptype console}

uses
  Classes, blcksock, sockets, Synautil, SysUtils;

{@@
  コネクションに参加する。ヘッダを読み、しかるべき返信を行う
}
procedure AttendConnection(ASocket: TTCPBlockSocket);
var
  timeout: integer;
  s: string;
  method, uri, protocol: string;
  OutputDataString: string;
  ResultCode: integer;
begin
  timeout := 120000;

  WriteLn('Received headers+document from browser:');

  //リクエストラインを読み込む
  s := ASocket.RecvString(timeout);
  WriteLn(s);
  method := fetch(s, ' ');
  uri := fetch(s, ' ');
  protocol := fetch(s, ' ');

  //リクエストヘッダを読み込む
  repeat
    s := ASocket.RecvString(Timeout);
    WriteLn(s);
  until s = '';

  // ここで出力ストリームに文書を書き込む

  if uri = '/' then
  begin
    // 出力する文書をストリームに書く
    OutputDataString :=
      '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
      + ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">' + CRLF
      + '<html><h1>Teste</h1></html>' + CRLF;

    // ヘッダをクライアントに返信する
    ASocket.SendString('HTTP/1.0 200' + CRLF);
    ASocket.SendString('Content-type: Text/Html' + CRLF);
    ASocket.SendString('Content-length: ' + IntTostr(Length(OutputDataString)) + CRLF);
    ASocket.SendString('Connection: close' + CRLF);
    ASocket.SendString('Date: ' + Rfc822DateTime(now) + CRLF);
    ASocket.SendString('Server: Servidor do Felipe usando Synapse' + CRLF);
    ASocket.SendString('' + CRLF);

  //  if ASocket.lasterror <> 0 then HandleError;

    //文書をブラウザに送信する
    ASocket.SendString(OutputDataString);
  end
  else
    ASocket.SendString('HTTP/1.0 504' + CRLF);
end;

var
  ListenerSocket, ConnectionSocket: TTCPBlockSocket;
begin
  ListenerSocket := TTCPBlockSocket.Create;
  ConnectionSocket := TTCPBlockSocket.Create;

  ListenerSocket.CreateSocket;
  ListenerSocket.setLinger(true,10);
  ListenerSocket.bind('0.0.0.0','1500');
  ListenerSocket.listen;

  repeat
    if ListenerSocket.canread(1000) then
    begin
      ConnectionSocket.Socket := ListenerSocket.accept;
      WriteLn('Attending Connection. Error code (0=Success): ', ConnectionSocket.lasterror);
      AttendConnection(ConnectionSocket);
    end;
  until false;

  ListenerSocket.Free;
  ConnectionSocket.Free;
end.


FPC に備え付けの fcl-net コンポーネントを用いた TCP/IP クライアント-サーバ の例

ブログ記事における例をご覧ください。

HTTP ページのダウンロードや POST を用いたウェブサーバへのアップロード、external IP アドレスの取得

これらの例は、 fphttpclient#Examples で見つかります(FPC/Lazarus に備え付けの fphttpclient コンポーネントを使用した例です)。

Webサービス

W3C によると、 Web サービスとは ネットワーク越しに機械と機械を相互に利用できるように設計されたソフトウェアの名称です。

Web サービスは、 WSDL などのように 「機械が処理可能」 な形式で記述されているインタフェースを持ちます。 そのほかのシステムは、SOAP エンベロープに含まれるメッセージを使用したインタフェースによって定められた方法で、ウェブサービスと対話します。もしくは、RESTの原則に従うかもしれません。 これらのメッセージは、一般的に HTTP を使用して伝達され、普通は他のウェブに関する規格と共同した XML から構成されています。

様々なプログラミング言語で書かれ、様々なプラットホームで動くソフトウェアアプリケーションであっても、 Web サービスを利用することで、一つのコンピュータにおける内部処理と同様な方法でインターネットのようなコンピュータネットワーク越しでも、データの交換が可能になります。

この相互運用性 (例えば、WindowsとLinuxアプリケーションの間など) はオープンな規格によってもたらされました。 OASIS と W3C は Web サービスのアーキテクチャと標準化に関して信頼できる主要な委員会です。 また、 Web サービス実装間の相互運用性を改良するため、 WS-I 組織は、さらなる関連する標準を定義するために、一連のプロファイルを開発しています。

FPC & Lazarus のための Web サービスツールキット

Web Service Toolkit は FPC と Lazarus のための WEBサービス のパッケージです。

以下もご参照ください

  • Web Development Portal
  • ネットワーキングライブラリ - 各種ネットワーキングライブラリの比較
  • Brook Framework - 完全な Free Pascal による Web アプリケーションのためのフレームワークです。 純粋な Pascal からできており、Pascal ではない言語に悩まされる必要はありません。
  • FastPlaz - Pascal のための Fast Web フレームワークです。 特徴として、theme/templating や simple Model、 セッション、メーラー などなど。
  • Sockets - TCP/IP ソケットコンポーネント
  • fcl-net - FPC に備え付けのネットワーキングライブラリ
  • Indy_with_Lazarus/ja - 多くの機能を持つネットワーキングライブラリのインストール方法
  • lNet - 軽量ネットワークコンポーネント
  • Synapse - シリアルポートとSerial port and synchronous TCP/IP ライブラリ
  • XML Tutorial/ja - XML はしばしばネットワーク通信で用いられます
  • FPC and Apache Modules
  • fcl-web - fpWeb という名前でも知られており、 cgi や fastcgi、apache のモジュールからなる Web アプリケーションを作るためのライブラリです。
  • セキュア・プログラミング
  • Internet Tools - Synapse/wininet/Android's httpcomponents simplifying https and redirections や ダウンロードされたページを処理するための XPath/XQuery/CSS セレクタ/JSON のエンジン などのラッパー