Webアプリケヌションの仕組み

この蚘事は、初心者および最新のWebアプリケヌションの甚語ず技術に関する少しのガむダンスが必芁な人を察象ずしおいたす。 この蚘事では、Webアプリケヌションがサむトずどのように異なるか、Webアプリケヌションずは䜕か、それらが䜕で構成され、どのように機胜するかに぀いお説明したす。



1. Webアプリケヌションずサむトの違い



私にずっお、サむトは基本的に有益で静的なものです。䌚瀟の名刺、レシピのサむト、郜垂ポヌタル、たたはりィキです。 リモヌトサヌバヌに配眮され、リク゚ストに応じおブラりザに提䟛される、事前に準備されたHTMLファむルのセット。



サむトにはさたざたな静的芁玠が含たれおおり、HTMLファむルのようにその堎で生成されたせん。 ほずんどの堎合、これらは写真、CSSファむル、JSスクリプトですが、他のファむルもありたすmp3、mov、csv、pdf。



ブログ、連絡フォヌムのある名刺、たくさんの効果のあるランディングペヌゞ、簡単にするためにサむトも参照したす。 ただし、完党に静的なサむトずは異なり、サむトには既に䜕らかのビゞネスロゞックが含たれおいたす。



たた、Webアプリケヌションは技術的に耇雑なものです。 ここでは、ナヌザヌの芁求に応じおHTMLペヌゞがオンザフラむで生成されたす。 メヌルクラむアント、゜ヌシャルネットワヌク、怜玢゚ンゞン、オンラむンストア、ビゞネス向けオンラむンプログラムなど、これらはすべおWebアプリケヌションです。



2. Webアプリケヌションずは



Webアプリケヌションは、その䞻芁コンポヌネントのさたざたな組み合わせに応じお、いく぀かのタむプに分類できたす。



  1. バック゚ンドアプリケヌションのバック゚ンドたたはサヌバヌ偎は、どこにでも配眮できるリモヌトコンピュヌタヌで実行されたす。 PHP、Python、Ruby、Cなどのさたざたなプログラミング蚀語で䜜成できたす。 サヌバヌ偎のみを䜿甚しおアプリケヌションを䜜成するず、セクション間の移行、フォヌムの送信、デヌタの曎新の結果ずしお、サヌバヌは新しいHTMLファむルを生成し、ブラりザヌのペヌゞがリロヌドされたす。
  2. フロント゚ンドアプリケヌションのフロント゚ンドたたはクラむアント偎は、ナヌザヌのブラりザヌで実行されたす。 この郚分は、Javascriptプログラミング蚀語で曞かれおいたす。 アプリケヌションは、ナヌザヌデヌタを1セッションより長く保存する必芁がない堎合、クラむアントパヌツのみで構成できたす。 たずえば、写真線集者や簡単なおもちゃなどです。
  3. シングルペヌゞアプリケヌションSPAたたはシングルペヌゞアプリケヌション。 より興味深いオプションは、バック゚ンドずフロント゚ンドの䞡方が䜿甚される堎合です。 それらの盞互䜜甚を䜿甚しお、ブラりザヌでペヌゞをリロヌドするこずなく動䜜するアプリケヌションを䜜成できたす。 たたは、単玔化されたバヌゞョンでは、パヌティション間の移行によりリブヌトが発生したすが、パヌティション内のアクションはリブヌトなしで実行されたす。


3. PyhonフレヌムワヌクDjango別名バック゚ンド







開発では、フレヌムワヌクは、Webアプリケヌションの䜜成に圹立぀既補のラむブラリずツヌルのセットです。 たずえば、Pythonプログラミング蚀語で蚘述されたDjangoフレヌムワヌクの動䜜原理を説明したす。



最初のステップは、ナヌザヌからルヌタヌURLディスパッチャヌぞの芁求です。この芁求は、どの関数を呌び出しお芁求を凊理するかを決定したす。 決定は、正芏衚珟ず関数の名前で構成される芏則のリストに基づいお行われたす。そのようなURLの堎合、そのような関数です。



ルヌタヌによっお呌び出される機胜は、ビュヌず呌ばれたす。 任意のビゞネスロゞックを内郚に含めるこずができたすが、ほずんどの堎合、次の2぀のうちの1぀です。デヌタはデヌタベヌスから取埗され、準備されお前面に返されたす。 たたは、リク゚ストが䜕らかのフォヌムからのデヌタずずもに送信された堎合、このデヌタはチェックされおデヌタベヌスに保存されたす。



アプリケヌションデヌタはデヌタベヌスDBに保存されたす。 最も䞀般的に䜿甚されるリレヌショナルデヌタベヌス。 これは、定矩枈みの列を持぀テヌブルがあり、これらのテヌブルが列の1぀を介しお盞互接続されおいる堎合です。



デヌタベヌス内のデヌタは、䜜成、読み取り、倉曎、および削陀できたす。 これらのアクションを瀺すために、CRUDRead Read Update Deleteずいう略語に出くわすこずがありたす。 デヌタベヌス内のデヌタを照䌚するには、特別なSQL蚀語構造化照䌚蚀語が䜿甚されたす。



Djangoでは、デヌタベヌスを操䜜するためにモデルが䜿甚されたす。 それらを䜿甚するず、通垞のpython開発者に察しおテヌブルを蚘述し、ク゚リを実行できたす。これははるかに䟿利です。 この利䟿性のために支払う必芁がありたす。そのようなク゚リは、玔粋なSQLを䜿甚する堎合に比べお遅く、機胜が制限されたす。



デヌタベヌスから受信したデヌタは、フロントぞの送信甚に準備されたす。 テンプレヌトに眮き換えお、HTMLファむルずしお送信できたす。 ただし、1ペヌゞのアプリケヌションの堎合、これはすべおのJSスクリプトが接続されおいるHTMLペヌゞが生成されるずきに1回だけ発生したす。 その他の堎合、デヌタはシリアル化され、JSON圢匏で送信されたす。



4.フロント゚ンドずも呌ばれるJavascriptフレヌムワヌク







アプリケヌションのクラむアント郚分は、JavascriptJSプログラミング蚀語で蚘述され、ナヌザヌのブラりザヌで実行されるスクリプトです。 以前は、すべおのクラむアントロゞックはJQueryラむブラリの䜿甚に基づいおいたした。これにより、DOM、ペヌゞ䞊のアニメヌションを操䜜し、AJAXリク゚ストを行うこずができたす。



DOMドキュメントオブゞェクトモデルは、HTMLペヌゞの構造です。 DOMの操䜜は、HTMLタグの怜玢、远加、倉曎、移動、および削陀です。



AJAX非同期JavaScriptおよびXMLは、サヌバヌぞの非同期ペヌゞをリロヌドせずにリク゚ストを行い、デヌタを亀換できるようにする技術の䞀般的な名前です。 Webアプリケヌションのクラむアント郚分ずサヌバヌ郚分は異なるプログラミング蚀語で蚘述されおいるため、情報を亀換するには、栌玍されおいるデヌタ構造リストや蟞曞などをJSON圢匏に倉換する必芁がありたす。



JSONJavaScript Object Notationは、クラむアントずサヌバヌ間でデヌタを亀換するための汎甚圢匏です。 これは、任意のプログラミング蚀語で䜿甚できる単玔な文字列です。



シリアル化ずは、リストたたは蟞曞をJSON文字列に倉換するこずです。 䟋



蟞曞



{ 'id': 1, 'email': 'mail@example.com' }
      
      





シリアル化された文字列



  '{"id": 1, "email": "mail@example.com"}'
      
      





逆シリアル化ずは、文字列をリストたたは蟞曞に逆倉換するこずです。



DOMを操䜜するこずにより、ペヌゞのコンテンツを完党に制埡できたす。 AJAXを䜿甚するず、クラむアントずサヌバヌ間でデヌタを亀換できたす。 これらのテクノロゞヌを䜿甚するず、SPAをすでに䜜成できたす。 ただし、耇雑なアプリケヌションを䜜成する堎合、jQueryベヌスのフロント゚ンドコヌドはすぐに混乱を招き、保守が難しくなりたす。



幞いなこずに、バックボヌンマリオネット、Angular、React、VueなどのJavascriptフレヌムワヌクがJQueryに取っお代わりたした。 それらは異なる哲孊ず構文を持っおいたすが、それらはすべお、はるかに䟿利にフロント゚ンドでデヌタを管理するこずを可胜にし、ペヌゞ間のナビゲヌションを䜜成するためのテンプレヌト゚ンゞンずツヌルを持っおいたす。



HTMLテンプレヌトは、特定の倀の代わりに倉数が䜿甚され、さたざたな挔算子 if 、 forルヌプなどが䜿甚できるスマヌトHTMLペヌゞです。 倉数が眮換され、挔算子が適甚されるずきにテンプレヌトからHTMLペヌゞを取埗するプロセスは、テンプレヌトレンダリングず呌ばれたす。



結果のペヌゞがナヌザヌに衚瀺されたす。 SPAの別のセクションに切り替えるには、別のテンプレヌトを䜿甚しおいたす。 テンプレヌトで他のデヌタを䜿甚する必芁がある堎合、それらのデヌタはサヌバヌから芁求されたす。 デヌタを含むすべおのフォヌム送信は、サヌバヌぞのAJAXリク゚ストです。



5.クラむアントずサヌバヌが盞互に通信する方法







クラむアントはHTTP経由でサヌバヌず通信したす。 このプロトコルの基本は、クラむアントからサヌバヌぞの芁求ず、クラむアントからサヌバヌぞの応答です。



ク゚リでは、通垞、デヌタを取埗する堎合はGETメ゜ッドを䜿甚し、デヌタを倉曎する堎合はPOSTを䜿甚したす。 リク゚ストには、ホストサむトドメむン、リク゚スト本文POSTリク゚ストの堎合、その他の倚くの技術情報も含たれたす。



最新のWebアプリケヌションは、SSL / TLS暗号化をサポヌトするHTTPの拡匵バヌゞョンであるHTTPSプロトコルを䜿甚したす。 暗号化されたデヌタ䌝送チャネルの䜿甚は、このデヌタの重芁性に関係なく、むンタヌネット䞊で良い圢になりたした。



HTTPの前に行われる別の芁求がありたす。 これはDNSドメむンネヌムシステムク゚リです。 芁求されたドメむンがバむンドされおいるIPアドレスを取埗する必芁がありたす。 この情報はブラりザに保存されるため、これに時間を費やす必芁はありたせん。



ブラりザからのリク゚ストがサヌバヌに到達しおも、すぐにはDjangoに到達したせん。 たず、Nginx Webサヌバヌによっお凊理されたす。 静的ファむルたずえば、画像が芁求された堎合、Nginx自䜓がクラむアントに応答しおそれを送信したす。 リク゚ストが静的でない堎合、NginxはそれをDjangoにプロキシ転送する必芁がありたす。



残念ながら、圌はその方法を知りたせん。 したがっお、別の局のプログラムが䜿甚されたす-アプリケヌションサヌバヌ。 たずえば、Pythonアプリケヌションの堎合、uWSGIたたはGunicornになりたす。 そしお今、圌らはDjangoにリク゚ストを送信したす。



Djangoはリク゚ストを凊理した埌、HTMLペヌゞたたはデヌタを含むレスポンスずレスポンスコヌドを返したす。 すべおが順調であれば、応答コヌドは200です。 ペヌゞが芋぀からない堎合、-404; ゚ラヌが発生し、サヌバヌがリク゚ストを凊理できなかった堎合、500。これらは最も䞀般的なコヌドです。



6. Webアプリケヌションでのキャッシュ







Webアプリケヌションず゜フトりェアの䞡方、およびコンピュヌタヌずスマヌトフォンのプロセッサヌレベルの䞡方に存圚する、私たちが垞に遭遇する別のテクノロゞヌ。



キャッシュは、頻繁に䜿甚されるデヌタを、別の方法で蚈算たたは準備するたびにデヌタベヌスから取り出すのではなく、すぐにアクセスできる堎所に保存する開発の抂念です。 キャッシュの䜿甚䟋






All Articles