add web and http slides

- change numbering
- add snippets for html and css
- add images
main
borb 1 month ago
parent e6612bdccf
commit 86ce67dbf1

@ -49,6 +49,26 @@
], ],
"description": "TypeScript code block" "description": "TypeScript code block"
}, },
"html code block" : {
"scope": "markdown",
"prefix": "html",
"body": [
"```html",
"$0",
"```"
],
"description": "HTML code block"
},
"css code block" : {
"scope": "markdown",
"prefix": "css",
"body": [
"```css",
"$0",
"```"
],
"description": "CSS code block"
},
"inline code" : { "inline code" : {
"scope": "markdown", "scope": "markdown",
"prefix": "c", "prefix": "c",

File diff suppressed because one or more lines are too long

@ -0,0 +1,252 @@
---
marp: true
paginate: true
math: mathjax
theme: buutti
title: 1. Introduction to the Web
---
# Introduction to the Web
<!-- headingDivider: 5 -->
<!-- class: invert -->
## Contents
1) Web and the Internet
2) Frontend and backend
3) Anatomy of a website
4) Web APIs
## Web and the Internet
### What is the Internet?
<div class='columns' style='grid-template-columns: 4fr 1fr;' markdown='1'>
<div markdown='1'>
* World Wide Web is not the Internet
* Internet: connected networks that use the TCP/IP protocol
* made out of billions of computers, cables and antennae directing data to the right direction
* World Wide Web: URL-based information system
</div>
<div markdown='1'>
![](imgs/1-web-and-html_0.png)
</div>
</div>
* WWW is a big part of the Internet but it consists of other kinds of traffic, too:
* Email
* VoIP (Skype, Discord, etc)
* File transfer between computers (FTP)
* remote connections to other computers
* In other words, the Internet is an infrastructure and WWW is served via it
### What is the Web?
<div class='columns21' markdown='1'>
<div markdown='1'>
* World wide web (www) is the part of the Internet where browsers fetch and show websites
* WWW makes sites and applications accessible to all kinds of devices:
* mobile phones, computers, smart watches, TVs...
* For the websites to appear on all the different devices similarly, strict rules are needed
</div>
<div markdown='1'>
| | Browser | Engine |
|---------------------------------------------|---------------|---------|
| ![w:80](imgs/1-web-and-html_3.png) | **Chrome** | Blink |
| ![w:80](imgs/1-web-and-html_4.png) | **Edge** | Blink |
| ![w:80](imgs/1-web-and-html_1.png) | **Firefox** | Gecko |
| ![w:80](imgs/1-web-and-html_2.png) | **Safari** | WebKit |
</div>
</div>
## Frontend vs Backend
* Web development is split into [**_frontend_** and **_backend_**](https://en.wikipedia.org/wiki/Frontend_and_backend)
* Frontend is the website users can actually see
* Visual elements of a website or app the user can interact with
* Backend is the invisible part
* "Server side" where user's data is stored
* Backend is not interacted with directly, but gives and modifies its stored data based on user requests
* _**Full stack development**_ refers to working on both backend and frontend!
### What is a server or "the cloud"
<div class='columns32' markdown='1'>
<div markdown='1'>
* A server or "the cloud" is just another computer, or multiple ones
* Server software is constantly running on it
* Your own computer could be a server!
* If you need to save an image, post a comment on a news website, or just load a website, you send a **_request_** to a server
* Server then gives an appropriate **_response_** based on the request
</div>
<div markdown='1'>
![](imgs/1-web-and-html_5.png)
</div>
</div>
### Backend
<div class='columns21' markdown='1'>
<div markdown='1'>
* Backend handles e.g.,
* saving and fetching user data from a **_database_**
* user authentication and connecting multiple users together (chat apps!)
* Databases are used with _**query languages**_ like **_SQL_**
* Backend software can be written with various different programming languages
* even with JavaScript! See: [Express](https://expressjs.com/)
* Simple websites don't require a dedicated backend
</div>
<div markdown='1'>
![](imgs/1-web-and-html_6.png)
</div>
</div>
## Anatomy of a website
### Building blocks of a website
* Historically, websites looked something like this
* [https://web.archive.org/web/19970129232848/http://www.iltalehti.fi/](https://web.archive.org/web/19970129232848/http://www.iltalehti.fi/)
* Nowadays, a website can even be a full-blown application!
* [https://open.spotify.com/](https://open.spotify.com/)
* Old and new sites alike are written in **_HTML_**, which describes the **_structure_** of the site
* In mid-90s, plain HTML was extended with **_CSS_** to implement **_styling_**
* The third building block of a website is JavaScript, or **_JS_**, which is used to add **_interactivity_**
### HTML
<div class='columns32' markdown='1'>
<div markdown='1'>
* HTML stands for **_Hypertext markup language_**
* HTML defines the structure of a website
* It tells what text, images and containers the website has
* You might have seen raw html if your browser has failed due to a slow connection $\Rightarrow$
* [motherfuckingwebsite.com](https://motherfuckingwebsite.com/)
* http://catb.org/~esr/open-source.html
```html
<body>
<h1>This is a Heading</h1>
<p>This is a paragraph.</p>
</body>
```
</div>
<div markdown='1'>
![w:340](imgs/1-web-and-html_8.png)
</div>
</div>
### CSS
<div class='columns' markdown='1'>
<div markdown='1'>
* CSS stands for **_Cascading style sheets_**
* CSS defines the ***look*** of the website
* It tells the fonts, sizes, colors and locations of elements
* Can be used to animate elements
```css
body {
background-color: lightblue;
}
h1 {
color: white;
text-align: center;
}
p {
font-family: verdana;
}
```
</div>
<div markdown='1'>
![](imgs/1-web-and-html_9.png)
* [bettermotherfuckingwebsite.com](http://bettermotherfuckingwebsite.com/)
* https://www.emuurom.com/
</div>
</div>
### JavaScript
* With a dedicated programming language, JavaScript, your website can become interactive
* It allows you to add functionality to buttons, send data to / fetch data from a server in real time
<div class='columns' markdown='1'>
<div markdown='1' class='centered'>
![w:300](imgs/1-web-and-html_10.png)
</div>
<div markdown='1' class='centered'>
![w:350](imgs/1-web-and-html_11.png)
</div>
</div>
## Web APIs
### What is a Web API
* ***API (Application Programming Interface)*** defines a way of communicating between applications
* A Web API defines how a client can communicate with a web server
* With the help of APIs, you don't need to create all functionality yourself
* Each program that wants to communicate to the outside world defines their own interface
* There are some architectural models like **_REST (Representational State Transfer)_** that exist to generalize API design
### Client-side and Server-side APIs
* [Client-side APIs](https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Client-side_APIs/Introduction) — called on the web browser (client side):
* Browser APIs, built into the browser itself and extend its functionality
* For instance, the geolocation API returns coordinates where the browser is located
* Third-party APIs, for retrieving data from somewhere on the Web
* Server-side APIs — called on the server:
* For communicating between servers or the client
* Consist of multiple exposed ***endpoints*** with a defined request-response system
### API communication
<div class='centered'>
![w:800](imgs/web-apis.svg)
</div>
## Third party APIs
* Many services have public APIs that anyone can use
* Some services require users to have an [API key](https://en.wikipedia.org/wiki/API_key)
<div class='centered'>
![w:900](imgs/third-party-apis.svg)
</div>

File diff suppressed because one or more lines are too long

@ -0,0 +1,185 @@
---
marp: true
paginate: true
math: mathjax
theme: buutti
title: 2. HTTP
---
# HTTP
<!-- headingDivider: 5 -->
<!-- class: invert -->
## Contents
1) What is HTTP?
2) HTTP Requests
3) HTTP Responses
4) IP address and ports
## What is HTTP?
* **_HTTP_** (Hypertext Transfer Protocol) is a TCP/IP based communication protocol, which provides a standardized way for computers to communicate with each other
* The communication happens between a client (browser, application…) and a server
* The client sends a **_request_**, and the server returns a **_response_**
* HTTP is *__connectionless__*:
* The client and server are only aware of each other during the request-response phase
* After that, each new request is sent through a new connection
### But what is TCP/IP?
* It is known as the [Internet protocol suite](https://en.wikipedia.org/wiki/Internet_protocol_suite)
* Framework used for organizing communication protocols over the Internet
* TCP = Transmission Control Protocol
* Controlled stream of bytes between applications communicating via an IP network
* IP = Internet Protocol
* Delivering packets from host to destination with IP addresses
### HTTP structure
<div class='columns' markdown='1'>
<div markdown='1'>
![w:700](imgs/http-protocol.svg)
</div>
<div markdown='1'>
* The HTTP protocol acts as a communication bus between the web client (e.g. web browser) and the web server
* There can be multiple clients connected to the server simultaneously
* The clients are not connected to each other but only to the server
</div>
</div>
## HTTP requests
* HTTP defines a set of request methods
* The most common requests are `GET`, `POST`, `PUT` and `DELETE`
* These are needed to create a basic CRUD app *(Create, Read, Update, Delete)*
* More requests are listed in the [mdn web docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Methods)
| HTTP Method | Usage | Example Use |
|-------------|:---------------------|:------------------------------------------|
| `GET` | Retrieve content | Browser fetching a webpage |
| `POST` | Add new data | Submitting a form to create a new account |
| `PUT` | Update existing data | Updating user profile information |
| `DELETE` | Remove existing data | Deleting a user account |
### Note: URI vs URL
* The website address is more formally known as the ***URL (uniform resource locator)***
* `https://maps.google.com`
* `https://maps.google.com/maps?q=Oulu` (includes a ***query***)
* It is a subset of an ***URI (uniform resource identifier)***
* This identifies a resource on a webpage
### HTTP request format
* Request line: `<request method> <request URI>`
* Example: `GET https://example.com/products`
* Headers (optional)
* Example: `Date: Mon, 07 Sep 2020 08:39:33 GMT`
* Example: `Content-Type: application/json`
* Body (optional)
* Example in the JSON format:
```json
{
"date": "2020-09-08T11:39:34.2837813+03:00",
"temperatureC": 11,
"temperatureF": 51,
"summary": "Cool"
}
```
### HTTP request examples
| Method | URI | Headers | Body |
|:---------|:--------------------------------|:---------------------------------|:--------------------|
| `GET` | `http://server.com/` | | |
| `GET` | `http://server.com/10` | | |
| `POST` | `http://server.com/users` | `Content-Type: application/json` | `{"name": "Dan"}` |
| `PUT` | `http://server.com/users/2` | `Content-Type: application/json` | `{"name": "Danny"}` |
| `DELETE` | `http://server.com/users/2` | | |
## HTTP response format
* HTTP responses have the following format:
* Status line: `<HTTP version> <status code> <reason phrase>`
* Example:`HTTP/1.1 200 OK`
* Headers (optional)
* `Date: Mon, 07 Sep 2020 08:39:33 GMT`
* `Content-Type: application/json`
* Body (optional)
```json
{
"date": "2020-09-08T11:39:34.2837813+03:00",
"temperatureC": 11,
"temperatureF": 51,
"summary": "Cool"
}
```
### HTTP status codes
* The status line of HTTP a response sent by an API should accurately describe the status of what happened on the server after each request:
* Did the operation succeed? (`2xx` status codes)
* Was there an error with the request? (`4xx` status codes)
* E.g., the request line was malformed, or the server doesn't support it
* Did a server-side exception occur? (`5xx` status codes)
* This is never the client's fault!
### Status codes for a CRUD app
* Your APIs should use the following status codes for responses to CRUD operations
* See [Restfulapi.net](https://restfulapi.net/http-status-codes/) and [Wikipedia](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) HTTP status code listings
| `2xx SUCCESS` | `4xx CLIENT ERROR` | `5xx SERVER ERROR` |
|:-------------------|:---------------------|:------------------------------|
| `200 - OK` | `400 - Bad Request` | `500 - Internal Server Error` |
| `201 - Created` | `401 - Unauthorized` | |
| `204 - No Content` | `403 - Forbidden` | |
| | `404 - Not Found` | |
| | `409 - Conflict` | |
## IP and ports
### IP addresses
* Every node, or ***host*** on a computer network needs an IP (Internet Protocol) address
* These can be public or private
* Serves two functions: identifies and provides the location of the host
* The old 32-bit IPv4 addresses are of the form `192.0.2.1`
* The 128-bit IPv6 addresses are of the form `2001:0db8:0000:0000:0000:8a2e:0370:7334` (can be shortened to `2001:db8::8a2e:370:7334`)
### Port numbers
<!-- Note: older version in the backend-basics repo -->
* The IP address is often followed by a ***port*** number separated by a colon: `192.0.2.1:8080`
* The port number (16-bit unsigned integer) defines the port through which communication to your application happens
* Ports allow multiple applications to be located on the same host
* The client connects to this port in some server (defined by an IP address), so the client and the server are able to communicate
* Computers have several different ports at their disposal
### Reserved ports
<div class='columns' markdown='1'>
<div markdown='1'>
* Some of them are reserved and your application might not be able to assign those ports to itself
* Ports from 0 to 1023 are ***system ports***
* There are restrictions in manually assigning applications to use them
* Generally, ports from 1024 to 65535 are available for the user to assign for applications
</div>
<div markdown='1'>
![](imgs/1-introduction-to-the-internet_1.png)
</div>
</div>

@ -1,158 +1,3 @@
# Web & HTML
1. Websites and The Internet
A short overview of the Internet and WWW
Anatomy of a website (or web app)
HTML, CSS, JS
2. HTML basics
Setting up
tags: p, h1, img src, a href, div
boilerplate
3. Chrome Dev Tools
4. HTML continued
Title, span, text-align, br..
User input
Tables
5. CSS basics
Websites and the Internet
# A short overview of the Internet and WWW
© Buutti Oy, All Rights Reserved
# What is the Internet?
* Web != the Internet
* Internet: connected networks that use the TCP/IP protocol
* made out of billions of computers, cables and antennae directing data to the right direction.
* World Wide Web: URL-based information system.
* a big part of the Internet but it consists of other kinds of traffic, too:
* Email
* VoIP (Skype/Teamspeak)
* File transfers between computers
* remote connections to other computers
* In other words, the internet is an infrastructure and WWW
* is served via it
![](imgs/1-web-and-html_0.png)
# What is the Web?
* World wide web (www) is the part of the Internet where browsers fetch and show websites
* Browsers ( _rendering engine_ in parentheses)
* Chrome (Blink)
* Firefox (Gecko)
* Edge (Blink)
* Safari (WebKit)
* WWW makes sites and applications accessible to all kinds of devices:
* mobile phones, computers, smart watches, TVs...
* For the websites to appear on all the different devices similarly, we need strict rules
![](imgs/1-web-and-html_1.png)
![](imgs/1-web-and-html_2.png)
![](imgs/1-web-and-html_3.png)
![](imgs/1-web-and-html_4.png)
# Back-end vs Front-end
* Web development is split into _Back-end_ and _Front-end_
* Front-end is the website users can actually see
* visual elements of a website or app the user can interact with
* Back-end is the invisible part
* "server side" where user's data is stored
* back-end is not interacted with directly, but gives and modifies its stored data based on user requests
* _Full stack development_ refers to working on both back-end and front-end!
# What is a server or "the Cloud"
* A Server or "the cloud" is just another computer
* server software is constantly running
* Your own computer could be a server!
* If you need to save an image, post a comment on a news website, or just load a website, you send a _request _ to a server
* Server then gives an appropriate _response_ based on the request
![](imgs/1-web-and-html_5.png)
# Backend
![](imgs/1-web-and-html_6.png)
* Backend handles e.g.,
* saving and fetching user data from a _database_
* user authentication and connecting multiple users together (chat apps!)
* Databases are used with _query languages_ like _SQL_
* Back-end software can be written with various different programming languages
* even with JavaScript! See: [Express](https://expressjs.com/)
* Simple websites don't require a dedicated back-end
![](imgs/1-web-and-html_7.png)
# Anatomy of a website
HTML, CSS and JS
# Anatomy of a website
* Historically, websites looked something like this
* [https://web.archive.org/web/19970129232848/http://www.iltalehti.fi/](https://web.archive.org/web/19970129232848/http://www.iltalehti.fi/)
* Nowadays, a website can even be a full-blown application!
* [https://open.spotify.com/](https://open.spotify.com/)
* old and new sites alike are written in _HTML_ __, __ which describes the _structure _ of the site
* In mid-90s, plain HTML was extended with _CSS_ _ _ to implement _styling_
* The third building block of a website is JavaScript, or _JS,_ which is used to add _interactivity_
# HTML
![](imgs/1-web-and-html_8.png)
HTML stands for _Hypertext markup language_
HTML defines the structure of a website
It tells what text, images and containers the website has
You might have seen raw html if your browser has failed due to a slow connection ->
[https://motherfuckingwebsite.com/](https://motherfuckingwebsite.com/)
# CSS
CSS stands for _Cascading style sheets_
CSS defines the __look __ of the website
It tells what sizes, colors and where everything is
[http://bettermotherfuckingwebsite.com/](http://bettermotherfuckingwebsite.com/)
![](imgs/1-web-and-html_9.png)
# JavaScript
With a dedicated programming language, JavaScript, your website can become interactive
It allows you to do computations, send data to a server or fetch new data in real time
![](imgs/1-web-and-html_10.png)
![](imgs/1-web-and-html_11.png)
# HTML basics # HTML basics
# Setting up # Setting up

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 750 450" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
<g transform="matrix(1.10215,0,0,1.10215,-63.6323,-115.02)">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:rgb(13,255,178);"/>
<clipPath id="_clip1">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z"/>
</clipPath>
<g clip-path="url(#_clip1)">
<g transform="matrix(2.57489,0,0,2.57489,-361.638,-258.165)">
<text x="182.034px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;">W<tspan x="191.667px " y="170.366px ">e</tspan>b Client</text>
</g>
</g>
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:none;stroke:white;stroke-width:2.28px;"/>
</g>
<g transform="matrix(1.10215,0,0,1.10215,173.804,-115.02)">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:rgb(13,255,178);"/>
<clipPath id="_clip2">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z"/>
</clipPath>
<g clip-path="url(#_clip2)">
<g transform="matrix(2.57489,0,0,2.57489,-359.101,-258.165)">
<text x="182.034px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;">W<tspan x="191.667px " y="170.366px ">e</tspan>b Client</text>
</g>
</g>
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:none;stroke:white;stroke-width:2.28px;"/>
</g>
<g transform="matrix(1.10215,0,0,1.10215,412.374,-115.02)">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:rgb(13,255,178);"/>
<clipPath id="_clip3">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z"/>
</clipPath>
<g clip-path="url(#_clip3)">
<g transform="matrix(2.57489,0,0,2.57489,-359.101,-258.165)">
<text x="182.034px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;">W<tspan x="191.667px " y="170.366px ">e</tspan>b Client</text>
</g>
</g>
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:none;stroke:white;stroke-width:2.28px;"/>
</g>
<g transform="matrix(1.10215,0,0,1.10215,-63.6323,-115.02)">
<path d="M182.034,207.146L182.034,300" style="fill:none;stroke:white;stroke-width:2.28px;"/>
<g transform="matrix(1.65073,0,0,1,-118.455,0)">
<path d="M182.034,300L371.054,300" style="fill:none;stroke:white;stroke-width:1.67px;"/>
</g>
<path d="M276.094,387.126L457.758,387.126" style="fill:none;stroke:white;stroke-width:2.28px;"/>
<g transform="matrix(1,0,0,1,123.002,0)">
<path d="M371.054,300L371.054,358.506" style="fill:none;stroke:white;stroke-width:2.28px;"/>
</g>
<g transform="matrix(1,0,0,0.314851,0,141.926)">
<path d="M401.053,358.506L401.053,207.146" style="fill:none;stroke:white;stroke-width:3.08px;"/>
</g>
<path d="M401.053,254.802L553.145,254.802" style="fill:none;stroke:white;stroke-width:2.28px;"/>
<path d="M553.145,254.802L553.145,358.506" style="fill:none;stroke:white;stroke-width:2.28px;"/>
<g transform="matrix(1,0,0,1.53247,0,-110.298)">
<path d="M612.234,300L612.234,207.146" style="fill:none;stroke:white;stroke-width:1.77px;"/>
</g>
</g>
<g transform="matrix(2.83792,0,0,2.83792,-288.573,-273.63)">
<text x="174.563px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;fill:white;">H<tspan x="183.176px 189.833px 195.844px " y="170.366px 170.366px 170.366px ">TTP</tspan> P<tspan x="213.715px 218.719px " y="170.366px 170.366px ">ro</tspan>tocol</text>
</g>
<g transform="matrix(2.83792,0,0,2.83792,-264.741,-138.83)">
<text x="194.942px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;fill:white;">Serv<tspan x="219.768px " y="170.366px ">e</tspan>r</text>
<text x="202.064px" y="182.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;fill:white;">side</text>
<text x="197.746px" y="194.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;fill:white;">script</text>
</g>
<g transform="matrix(1.10215,0,0,1.10215,343.926,124.88)">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:rgb(110,105,255);"/>
<clipPath id="_clip4">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z"/>
</clipPath>
<g clip-path="url(#_clip4)">
<g transform="matrix(2.57489,0,0,2.57489,-366.909,-258.243)">
<text x="182.034px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;">W<tspan x="191.667px " y="170.366px ">e</tspan>b Serv<tspan x="232.676px " y="170.366px ">e</tspan>r</text>
</g>
</g>
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:none;stroke:white;stroke-width:2.28px;"/>
</g>
<g transform="matrix(1.10215,0,0,1.10215,-63.6323,124.88)">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:rgb(255,163,254);"/>
<clipPath id="_clip5">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z"/>
</clipPath>
<g clip-path="url(#_clip5)">
<g transform="matrix(2.57489,0,0,2.57489,-366.909,-258.243)">
<text x="188.066px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;">Database</text>
</g>
</g>
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:none;stroke:white;stroke-width:2.28px;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 248 KiB

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 750 450" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:1.5;">
<g transform="matrix(1.10215,0,0,1.10215,-63.6323,-117.155)">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:rgb(13,255,178);"/>
<clipPath id="_clip1">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z"/>
</clipPath>
<g clip-path="url(#_clip1)">
<g transform="matrix(2.57489,0,0,2.57489,-372.081,-275.239)">
<text x="186.026px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:10.571px;">Application 1</text>
<text x="200.706px" y="180.937px" style="font-family:'Bahnschrift', sans-serif;font-size:10.571px;">(User)</text>
</g>
</g>
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:none;stroke:white;stroke-width:2.28px;"/>
</g>
<g transform="matrix(1.10215,0,0,1.10215,175.424,-117.155)">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:rgb(13,255,178);"/>
<clipPath id="_clip2">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z"/>
</clipPath>
<g clip-path="url(#_clip2)">
<g transform="matrix(2.57489,0,0,2.57489,-372.081,-275.239)">
<text x="186.026px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:10.571px;">Application 1</text>
<text x="200.706px" y="180.937px" style="font-family:'Bahnschrift', sans-serif;font-size:10.571px;">(User)</text>
</g>
</g>
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:none;stroke:white;stroke-width:2.28px;"/>
</g>
<g transform="matrix(1.10215,0,0,1.10215,409.366,-117.155)">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:rgb(13,255,178);"/>
<clipPath id="_clip3">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z"/>
</clipPath>
<g clip-path="url(#_clip3)">
<g transform="matrix(2.57489,0,0,2.57489,-372.081,-275.239)">
<text x="186.026px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:10.571px;">Application 1</text>
<text x="200.706px" y="180.937px" style="font-family:'Bahnschrift', sans-serif;font-size:10.571px;">(User)</text>
</g>
</g>
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:none;stroke:white;stroke-width:2.28px;"/>
</g>
<g transform="matrix(1.16187,1.32806,-1.32806,1.16187,156.137,-287.533)">
<text x="177.449px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;fill:white;">Send r<tspan x="212.67px " y="170.366px ">e</tspan>quest</text>
</g>
<g transform="matrix(1.16187,1.32806,-1.32806,1.16187,218.301,-295.039)">
<text x="179.063px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;fill:white;">R<tspan x="186.651px " y="170.366px ">e</tspan>ceiv<tspan x="214.389px " y="170.366px ">e</tspan> data</text>
</g>
<path d="M262.754,246.006L272.384,267.87L251.562,256.157L262.754,246.006Z" style="fill:white;"/>
<path d="M130.252,111.152C130.252,111.152 225.778,216.481 260.203,254.439" style="fill:none;stroke:white;stroke-width:2.52px;"/>
<g transform="matrix(0.960553,-0.0434951,-0.0434951,0.952041,243.351,10.996)">
<g transform="matrix(1.04322,0.047661,0.047661,1.05255,-254.394,-23.1723)">
<path d="M371.963,231.459L364.555,254.172L356.854,231.557L371.963,231.459Z" style="fill:white;"/>
<path d="M363.631,111.152C363.631,111.152 364.189,197.547 364.438,236.041" style="fill:none;stroke:white;stroke-width:2.52px;"/>
</g>
</g>
<g transform="matrix(-0.960814,0.0372899,0.0496436,-0.95174,506.492,353.564)">
<g transform="matrix(-1.0429,-0.0408614,-0.0543983,-1.05284,547.451,392.942)">
<path d="M379.307,132.275L386.861,109.61L394.416,132.275L379.307,132.275Z" style="fill:white;"/>
<path d="M386.861,252.634L386.861,127.742" style="fill:none;stroke:white;stroke-width:2.52px;"/>
</g>
</g>
<g transform="matrix(0.955913,-0.0486114,-0.0486114,0.9464,43.8756,13.9008)">
<g transform="matrix(1.04886,0.0538742,0.0538742,1.0594,-46.7683,-17.0903)">
<path d="M183.804,124.476L162.982,112.763L172.612,134.627L183.804,124.476Z" style="fill:white;"/>
<path d="M175.163,126.194C207.176,161.492 291.23,254.172 291.23,254.172" style="fill:none;stroke:white;stroke-width:2.52px;"/>
</g>
</g>
<g transform="matrix(0.0458035,1.00176,-1.00206,0.0520008,735.141,-22.6338)">
<g transform="matrix(0.0516801,-0.995581,0.995882,0.045521,-15.4516,732.923)">
<path d="M619.042,134.996L629.727,113.627L608.358,124.312L619.042,134.996Z" style="fill:white;"/>
<path d="M616.905,126.449C580.514,162.84 479.195,264.159 479.195,264.159" style="fill:none;stroke:white;stroke-width:2.52px;"/>
</g>
</g>
<g transform="matrix(-0.0843615,-0.9632,0.959546,-0.00948568,360.807,379.147)">
<g transform="matrix(-0.0102544,1.04126,-1.03731,-0.0911981,396.992,-341.116)">
<path d="M467.158,231.265L456.474,252.634L477.843,241.949L467.158,231.265Z" style="fill:white;"/>
<path d="M469.295,239.812C503.593,205.514 594.862,114.245 594.862,114.245" style="fill:none;stroke:white;stroke-width:2.52px;"/>
</g>
</g>
<g transform="matrix(1.10215,0,0,1.10215,174.897,108.934)">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:rgb(110,105,255);"/>
<clipPath id="_clip4">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z"/>
</clipPath>
<g clip-path="url(#_clip4)">
<g transform="matrix(2.57489,0,0,2.57489,-366.909,-258.243)">
<text x="203.919px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;">AP<tspan x="219.042px " y="170.366px ">I</tspan></text>
</g>
</g>
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:none;stroke:white;stroke-width:2.28px;"/>
</g>
<g transform="matrix(1.10215,0,0,1.10215,173.845,194.609)">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:rgb(255,163,254);"/>
<clipPath id="_clip5">
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z"/>
</clipPath>
<g clip-path="url(#_clip5)">
<g transform="matrix(2.57489,0,0,2.57489,-366.909,-258.243)">
<text x="183.212px" y="170.366px" style="font-family:'Bahnschrift', sans-serif;font-size:12px;">Application</text>
</g>
</g>
<path d="M276.094,143.082C276.094,136.843 271.028,131.777 264.789,131.777L99.279,131.777C93.039,131.777 87.974,136.843 87.974,143.082L87.974,195.84C87.974,202.08 93.039,207.146 99.279,207.146L264.789,207.146C271.028,207.146 276.094,202.08 276.094,195.84L276.094,143.082Z" style="fill:none;stroke:white;stroke-width:2.28px;"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

Loading…
Cancel
Save