HTTPサーバーとWeb開発

26. 最も簡単なCGI

CGI の開発が面倒であるのは標準入力の解析である。標準入力を各フィールド値に分割して(PARSE)、 コード化されている文字列を元のコードに戻す(デコード)作業が面倒なことになる。その後にデータベースなどをアクセスしてから結果としてHTMLを標準出力する。
HTMLを出力するだけのプログラムでも CGIとしては成立する。
実用レベルではないが、HTMLを標準出力するだけの最もカンタンな CGI の例を紹介しよう。

【 C言語の例 】
#include <stdio.h>
    #include <stdlib.h>
      int main(void){
        printf("Content-type: text/html\n\n");
        printf("Hello World\n");
      fflush(stdout);
    }
【 ILE-RPGの例 】
*****************  データの始め  **************************************
   D HTML      S       80  DIM(4) PERRCD(1) CTDATA     
     D RECBUF          S            512A                               
     D OUTLEN          S              9B 0 INZ(512)                    
     D CRLF            C                   X'15'                       
      /COPY QSYSINC/QRPGLESRC,QUSEC                                    
     C     1             DO        4             N                 4 0 
     C                   MOVEL     HTML(N)       RECBUF                
     C                   CAT       CRLF:0        RECBUF                
     C     ' '           CHECKR    RECBUF        OUTLEN                
     C*----------------------------------------------------+           
     C                   CALLB     'QtmhWrStout'                       
     C                   PARM                    RECBUF                
     C                   PARM                    OUTLEN                
     C                   PARM                    QUSEC                 
     C*----------------------------------------------------+           
     C                   END                                           
** CTDATA HTML                                                         
CONTENT TYPE: TEXT/HTML                                                
<HTML><HEAD><TITLE>TEST</TITLE></HEAD><BODY>
HELLO WORLD  
</BODY></HTML>
【 解説 】

この例でわかるように RPG では ILE-RPG を使って QtmhWrStout API で標準出力しなければならない。
コンパイルは

  CRTRPGMOD MODULE(MYLIB/MYRPG) SRCFILE(MYSRCLIB/QRPGLESRC)
  CRTPGM PGM(MYLIB/MYRPG) BNDSRVPGM(QTCP/QTMHCGI)

として 2段階の作業が要る。

QTCP/QTMHCGI は QtmhWrStout API を提供する IBM のサービス・プログラムであり CRTPGM でこれをバインドする必要がある。