Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2019-05 Webアプリケーション基礎知識/2019-05 Web application...

2019-05 Webアプリケーション基礎知識/2019-05 Web application fundamentals

Cybozu

May 29, 2019
Tweet

More Decks by Cybozu

Other Decks in Technology

Transcript

  1. Socket: クライアント側 ▌やること ⚫ 初期化 socket() ⚫ サーバーと接続 connect() ⚫

    送信 write() / 受信 read() ⚫ 終了 close() int sock = socket(AF_INET, SOCK_STREAM, 0); connect(sock, アドレス, len); write(sock, buf, buflen); read(sock, buf, buflen); close(sock);
  2. Socket: サーバー側 ▌やること ⚫ socket() ⚫ アドレスを設定 bind() ⚫ リクエスト受付

    listen() ⚫ リクエストを確立 accept() ⚫ read()/write() ⚫ close() int sock = socket(AF_INET, SOCK_STREAM, 0); bind(sock, アドレス, len); listen(sock, 128); while(1) { int fd = accept(sock, NULL, NULL); write(fd, buf, buflen); read(fd, buf, buflen); close(fd); } close(sock);
  3. CGI: Common Gateway Interface ▌Webサーバーとプログラムがやりとりするためのインターフェース ⚫ リクエストが来るたびにアプリのプロセスを起動する ⚫ リクエストの内容は、環境変数や標準入力で渡される ⚫

    結果は標準出力で返す ▌昔はこのやり方が主流 ⚫ Perlの時代 ⚫ 毎回プロセスを起動するので遅い ⚫ サイボウズ Office / メールワイズは今でもこれ request response program stdin/env stdout
  4. データベース管理システム(DBMS) ▌RDBMS / SQL ⚫ 「関係モデル」というものを扱うデータベース ⚫ SQLという言語で操作する ⚫ 後日詳しくやります

    ▌NoSQL ⚫ SQLへ対抗して出てきたデータベース(大抵速いがトレードオフ有り) ⚫キーバリューストア(KVS) ⚫ キーとバリューのペアの形式だけ保存 ⚫ドキュメント指向データベース ⚫ 柔軟な構造のデータを保存
  5. Cookie (RFC 6265) ▌サーバー側からクライアントにデータを保存される仕組み ⚫ サーバー:「Set-Cookie: <キー>=<値> 」というヘッダー を載せてレスポンスを返す ⚫クライアントはそのペアを保存する

    ⚫ クライアントはリクエストに「Cookie: <キー>=<値>」 を載せる ⚫Set-Cookieを返してきたドメインにだけ送る ▌HTTPが状態を持つことができる Set-Cookie: login=true Cookie: login=true
  6. HTML ▌文書に構造や意味を与えるための言語 ⚫ 見出し、段落、他の文書へのリンク、… ⚫ <h1></h1>, <p></p>, <a href=”https://~”></a>, …

    ▌それぞれのタグがどういう意味を持つからルールで決まっている ⚫ https://www.w3.org/TR/html5/ ⚫ 正しい使い方をする→機械が読める→スクリーンリーダが読め る→アクセシブル ▌講義では詳しくはやらないので、自分で調べてね
  7. テンプレートエンジン ▌HTMLの中にデータを埋めたり、プログラム的に表示を変える 仕組み ⚫ JSP, Freemarker, PHP, Smarty, eRuby, …

    ▌動的にHTMLを組み立てるためのツール <div> こんにちは! ${user.name}さん。 <#if user.isAdmin > あなたは管理者です。 </#if> </div> + user.name = “赤井” user.isAdmin = false <div> こんにちは! 赤井さん。 </div>
  8. Web API ▌Webアプリケーションの処理をネットワーク越しに呼び出す ⚫ HTMLではなくデータ(JSON, XML等)を返す ⚫ サーバー内のデータを更新する ⚫ JavaScriptから呼ぶ

    ▌例えば、kintoneはHTMLの生成は最低限 ⚫ ほとんどAPIを呼び出している ▌サーバーとクライアントの分離が出来てシンプルになる傾向
  9. By RRZEicons [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0)], via Wikimedia Commons https://commons.wikimedia.org/wiki/File%3AServer-multiple.svg

    By Sir Stig (Own work (Transfered by Mono)) [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0) or GFDL (http://www.gnu.org/copyleft/fdl.html)], via Wikimedia Commons https://commons.wikimedia.org/wiki/File%3AAluminium_MacBook.png