Some Tech Involved in Building A Web App
The UI of a website and a web "app" are visually rewarding to work on - changing item colors, shapes, functionalities for the end-user...
There are a lot of nuances in a lot of technologies involved in building web-based tools, though.
Here are a bunch of technologies that may or may not be involved in a web-app.
A Visual
flowchart TB
%% List of nodes at top
%% Composition of nodes into Sub-Graphs & flow layout in graph below
%%
%% NODES
%%
%% initial nodes
HTTPSERVER[Build an HTTP Server];
FIRSTUI[Serving First UI Content];
OPTS{Some Next Step Options}
%% server nodes
REST-API[RESTful API];
GRAPH-DATA[graphed data];
WEBSOCKETS[Websockets];
NODE[node];
DOCKER[Containerizing Servers with Docker];
LINUX[OS with Linux];
%% system design nodes;
AUTH[Authentication];
DATA-CACHE-LAYER[Data-Caching API Layer];
%% Database nodes;
MONGODB[NoSQL and MongoDB];
DATA-MODELING[Modeling Data];
%% Data-Modeling Nodes;
AAPROX[Approximation];
ATTR[Attribute];
BUCKET[Bucket];
COMPUTED[Computed];
DOC-VER[Document Versioning];
SCHEM-VER[Schema Versioning];
EXT-REF[Extended Reference];
OUTLIER[Outlier];
PRE-ALLOC[Pre-Allocation];
POLYMORPH[Polymorphic];
SUBSET[Subset];
TREE[Tree];
%% nodeJS nodes
SCALING-NODE[scaling an HTTP Server];
STREAMS[streams];
EVENTS[events];
DEBUGGING[debugging];
BUFFERS[buffers];
ERRORS[Errors];
%% scaling nodeJS nodes
MULTI-CORE-CLUSTERING[Cluster for multi-core];
CHILD-PROCESS[Child Processes for spawning long-running processes];
%% client nodes
HTML[HTML]
CSS[CSS]
JS[JavaScript*]
BROWSER-APIS[Browser APIs]
WEBPACK[Webpack]
BABEL[Babel]
LIBRARIES[JS Libraries like react, vue, angular]
%% JS nodes
ASYNC[async];
INHER[protoypical inheritance];
BIND-CALL[Bind,Call,Apply];
DATA-STRUCTS[Data Structures with Objects and Arrays];
%% Browser nodes
LOCAL-STORAGE[Local Storage];
SESSION-STORAGE[Session Storage];
FETCH[Fetch];
CLIPBOARD[Clipboard];
GEOLOC[GeoLocation];
%% Docker nodes
IMAGES[Image Management ]
CONTAINERS[Container Management]
CONTAINER-NETWORKS[Networking]
MULTI-CONTAINER[Multi-Container Projects with Compose]
VOLUMES[Extracting State with Volumes]
%%
%% Sub-Graph Groupings
%%
%% HTTP server sub-graph
subgraph HTTP_SERVER_SETUP[HTTP Server Setup]
direction LR;
HTTPSERVER --> FIRSTUI;
end;
%% Server-Curious SubGraph
subgraph SERVER_CURIOUS[Serving Content]
direction TB;
REST-API;
GRAPH-DATA;
WEBSOCKETS;
NODE;
DOCKER;
LINUX;
end;
%% DB-Curious
subgraph DATABASE_CURIOUS[Dealing with Data];
direction TB;
MONGODB;
DATA-MODELING;
end;
%% Modeling Data
subgraph MODELING_DATA_SG[Data Modeling];
direction LR;
AAPROX;
ATTR;
BUCKET;
COMPUTED;
DOC-VER;
SCHEM-VER;
EXT-REF;
OUTLIER;
PRE-ALLOC;
POLYMORPH;
SUBSET;
TREE;
end;
%% Networking & System-Design
subgraph SYSTEM_DESIGN[System Design]
direction TB;
end;
%% Client-Curious SubGraph
subgraph BROWSER_CURIOUS[Dig In to the Client]
direction TB;
HTML;
CSS;
JS;
BROWSER-APIS;
WEBPACK;
BABEL;
LIBRARIES;
end;
%% Node Sub-Categories
subgraph NODE-SUBGRAPH[NodeJS Details];
direction LR;
SCALING-NODE;
STREAMS;
EVENTS;
DEBUGGING;
BUFFERS;
ERRORS;
end;
%% Node Scaling
subgraph NODE-SCALING-SUBGRAPH[Scaling an HTTP Server]
direction TB;
MULTI-CORE-CLUSTERING;
CHILD-PROCESS;
end;
%% JS
subgraph JS-SUBGRAPH[JavaScript In Depth]
direction LR;
ASYNC;
INHER;
BIND-CALL;
DATA-STRUCTS;
end;
%% Browser
subgraph BROWSER-SUBGRAPH[Brower APIs]
direction LR;
LOCAL-STORAGE;
SESSION-STORAGE;
FETCH;
CLIPBOARD;
GEOLOC;
end;
%% Docker
subgraph DOCKER-SUBGRAPH[Docker Details];
direction LR;
CONTAINERS;
VOLUMES;
IMAGES;
CONTAINER-NETWORKS;
MULTI-CONTAINER;
end;
%%
%% Putting It All Together
%%
HTTP_SERVER_SETUP --> OPTS;
OPTS --> |Browser-Curious|BROWSER_CURIOUS;
OPTS --> |Server-Curious|SERVER_CURIOUS;
OPTS --> |Data-Curious|DATABASE_CURIOUS;
NODE --> |Node-Deets|NODE-SUBGRAPH;
JS --> |In Depth| JS-SUBGRAPH;
%% NOTE: single-node-to-section
SCALING-NODE --> |Server Scaling| NODE-SCALING-SUBGRAPH;
BROWSER-APIS --> |Deets| BROWSER-SUBGRAPH;
DOCKER --> |In-Depth| DOCKER-SUBGRAPH;
DATA-MODELING --> |Data Design Patterns| MODELING_DATA_SG;
Starting with A WebServer
A quick achievement can be to put together a simple http server and serve some text when a url is hit from a browser.
With an http server up && serving text to a request, several "directions" can be navigated:
- a frontend focus - check out html, javascript, css, browser apis, frontend javascript libraries/frameworks, frontend "build" systems, etc.
- a server focus - chec out REST APIs, websockets, node itself, containers with Docker, leveraging an OS like linux, etc.
- a data-curious focus - noSQL & MongoDB & document data storage, sql & relational data, data modeling patterns, etc.
Browser-Curious
The browser is the tool that we as website users use to see websites: Safari, Chrome, Firefox, Opera, IE, Brave, Tor...
These are web browsers.
Browsers have bunch of tech included in them, and handle some types of content:
- HTML: Documents, document elements, element attributes... web browsers can most commonly display some HTML to you.
- CSS: CSS is about styling, and styling can be written in a stylesheet. These stylesheets cascade in nature. These are referred to as cascading style sheets (CSS), and involve selectors, the box model, positioning, layout mechanisms, pseudo-selectors and more
- JavaScript: Javascript is most often used to alter the HTML & CSS, ass well as trigger asynchronous events in and from the browser.
- JavaScript has a slew of details to learn, some more "under the hood" than others: Prototypal Inheritance, async functions, concurrency and the event loop....there's even a spec available to get into the nitty gritty of JS
- JavaScript is also the coding langauge of NodeJS, the server-side runtime noted in other parts of this page - learning "ins and outs" of JS can be hugeley impactful on a "full stack" engineer's abilities
- Browser APIs: Draging & Dropping, fetching data, Handing Files, Geolocation
- A Frontend Build System: React, Webppack, Babel, scss - a handful of "modern" tools that are used to build a single-page-application system that gets "bundled" before releasing to a production environment
Server-Curious
A server is a computer. Servers, in website and web application development, "serve" data for a browser & the data can be website pages, data, &/or other details...
- REST APIs: Manage Data for the web through http methods & C.R.U.D (create,read,update,delete) operations
- Websockets: Open Web-Traffic for bi-directional communication in a single connection, helpful for "real-time" data-transfer
- Containerizing Servers with Docker: Change the root "knowledge" of a directory, isolate resources with cGroups, and manage unique "subtrees" of process in Linux - use Docker to do all this with an easier interface
- OS with Linux: The CLI, text editors in the command line, file manipulation, streams, pipes, permissions, networking, package management, shell scripting, automation...
- Node: Deep dive into JS on a server with streams, events, files, paths, scaling, process management, & more
Data-Curious
Data is the meat & bones of data-driven applications: e-commerce stores data might include all inventory. Weather apps data might include temperature readings. A trucking delivery system might store details about packages, drivers, & delivery stats.
- NoSql and MongoDB: interact with js object (document) styled data persisted to disk
- Modeling the Data: Data needs change and the shapes of data can change to suit consuming applications
Architecture Curious
An Overview of some project architectures