"рдирдП рдорд╣рд╛рдХрд╛рд╡реНрдп"ред рд╣рдо рд╣рд╛рдереА рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдЦрд╛рддреЗ рд╣реИрдВ

"рдирдП рдорд╣рд╛рдХрд╛рд╡реНрдп"ред рд╣рдо рд╣рд╛рдереА рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдЦрд╛рддреЗ рд╣реИрдВ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЧреЗрдо "рдПрдкрд┐рдХреНрд╕" рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдордХрд╛рдЬреА рдорд╛рд╣реМрд▓ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрдВрдЧрд╛, рдФрд░ рдЧреЗрдо рдХреЛ рдУрдкрдирдПрдлрдПрдПрдПрд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рднрд╛рдЧреЛрдВ рдореЗрдВ рднреА рддреЛрдбрд╝ рджреВрдВрдЧрд╛ред рдореИрдВ рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╕рднреА рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░реВрдВрдЧрд╛, рдореИрдВ рд╡рд░реНрдЪреБрдЕрд▓рдмреЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдорд┐рдиреАрдХреНрдпреВрдм рдореЗрдВ рддреИрдирд╛рдд рдХрд░реВрдВрдЧрд╛ред рдореЗрд░реА рдХрд╛рд░реНрдп рдорд╢реАрди рдореЗрдВ 2 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдФрд░ 12 рдЬреАрдмреА рд░реИрдо рд╣реИ; рдореИрдВ рд╕рд┐рд╕реНрдЯрдо рдбрд┐рд╕реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдПрд╕рдПрд╕рдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдЕрдкрдиреЗ рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдмрд┐рдпрди 8 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЗрдореИрдХ, рд╕реВрдбреЛ, рдЧрд┐рдЯ рдФрд░ рд╡рд░реНрдЪреБрдЕрд▓рдмреЙрдХреНрд╕ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдВрдЧреЗ, рдмрд╛рдХреА рд╕рдм рдХреБрдЫ GitHub рдФрд░ рдЕрдиреНрдп рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдХреЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬрдм рддрдХ рдЕрдиреНрдпрдерд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рд╣реЛ рд╣рдо рдЗрди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ /usr/local/bin рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВрдЧреЗред рдЖрдПрдБ рд╢реБрд░реВ рдХрд░реЗрдВ!

рдХрд╛рд░реНрдп рд╡рд╛рддрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рдХрд░рдирд╛

рдЧреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рд╣рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ:

$ curl -L0 https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz -o go.tar.gz
$ sudo tar -C /usr/local -xzf go.tar.gz
$ echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile

рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛:

$ mkdir -p ~/go/src/hello && cd ~/go/src/hello
$ echo 'package main

import "fmt"

func main() {
fmt.Printf("hello, worldn")
}' > hello.go
$ go build
$ ./hello
hello, world

рдлрд╛рд╕-рд╕реАрдПрд▓рдЖрдИ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рд╣рдо рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреЗ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ:

$ curl -sSL https://cli.openfaas.com | sudo -E sh
x86_64
Downloading package https://github.com/openfaas/faas-cli/releases/download/0.11.3/faas-cli as /tmp/faas-cli
Download complete.

Running with sufficient permissions to attempt to move faas-cli to /usr/local/bin
New version of faas-cli installed to /usr/local/bin
Creating alias 'faas' for 'faas-cli'.
  ___                   _____           ____
 / _  _ __   ___ _ __ |  ___|_ _  __ _/ ___|
| | | | '_  / _  '_ | |_ / _` |/ _` ___ 
| |_| | |_) |  __/ | | |  _| (_| | (_| |___) |
 ___/| .__/ ___|_| |_|_|  __,_|__,_|____/
      |_|

CLI:
 commit:  73004c23e5a4d3fdb7352f953247473477477a64
 version: 0.11.3

рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЖрдк рдмреИрд╢-рд╕рдорд╛рдкрди рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

faas-cli completion --shell bash | sudo tee /etc/bash_completion.d/faas-cli

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛

рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рдорд┐рдиреАрдХреНрдпреВрдм рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдФрд░ рдХреНрдпреВрдмрд▓реЗрдЯ рдХреЛ /usr/local/bin рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЗрд▓реНрдо рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:

$ curl https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 -o minikube && chmod +x minikube && sudo mv minikube /usr/local/bin/
$ curl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl -o kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
$ curl https://get.helm.sh/helm-v3.0.2-linux-amd64.tar.gz | tar -xzvf - linux-amd64/helm --strip-components=1; sudo mv helm /usr/local/bin

рдорд┐рдиреАрдХреНрдпреВрдм рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:

$ minikube start
  minikube v1.6.2 on Debian 8.11
  Automatically selected the 'virtualbox' driver (alternates: [])
  Downloading VM boot image ...
    > minikube-v1.6.0.iso.sha256: 65 B / 65 B [--------------] 100.00% ? p/s 0s
    > minikube-v1.6.0.iso: 150.93 MiB / 150.93 MiB [-] 100.00% 5.67 MiB p/s 27s
  Creating virtualbox VM (CPUs=2, Memory=8192MB, Disk=20000MB) ...
  Preparing Kubernetes v1.17.0 on Docker '19.03.5' ...
  Downloading kubeadm v1.17.0
  Downloading kubelet v1.17.0
  Pulling images ...
  Launching Kubernetes ...  Waiting for cluster to come online ...
  Done! kubectl is now configured to use "minikube"

рд╣рдо рдЬрд╛рдБрдЪ:

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-6955765f44-knlcb           1/1     Running   0          29m
kube-system   coredns-6955765f44-t9cpn           1/1     Running   0          29m
kube-system   etcd-minikube                      1/1     Running   0          28m
kube-system   kube-addon-manager-minikube        1/1     Running   0          28m
kube-system   kube-apiserver-minikube            1/1     Running   0          28m
kube-system   kube-controller-manager-minikube   1/1     Running   0          28m
kube-system   kube-proxy-hv2wc                   1/1     Running   0          29m
kube-system   kube-scheduler-minikube            1/1     Running   0          28m
kube-system   storage-provisioner                1/1     Running   1          29m

OpenFaaS рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рдирд╛рдорд╕реНрдерд╛рди рдмрдирд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ:

$ kubectl apply -f https://raw.githubusercontent.com/openfaas/faas-netes/master/namespaces.yml
namespace/openfaas created
namespace/openfaas-fn created

рд╣реЗрд▓реНрдо рдХреЗ рд▓рд┐рдП рдПрдХ рднрдВрдбрд╛рд░ рдЬреЛрдбрд╝реЗрдВ:

$ helm repo add openfaas https://openfaas.github.io/faas-netes/
"openfaas" has been added to your repositories

рдЪрд╛рд░реНрдЯ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЖрдЗрдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдбреЗрдЯрд╛ рдХреЛ k8s рд╕реАрдХреНрд░реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ:

$ PASSWORD=verysecurerandompasswordstring
$ kubectl -n openfaas create secret generic basic-auth --from-literal=basic-auth-user=admin --from-literal=basic-auth-password="$PASSWORD"
secret/basic-auth created

рдЖрдЗрдП рддреИрдирд╛рдд рдХрд░реЗрдВ:

$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "openfaas" chart repository
Update Complete.  Happy Helming!
$ helm upgrade openfaas --install openfaas/openfaas --namespace openfaas --set functionNamespace=openfaas-fn --set generateBasicAuth=false
Release "openfaas" does not exist. Installing it now.
NAME: openfaas
LAST DEPLOYED: Fri Dec 25 10:28:22 2019
NAMESPACE: openfaas
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
To verify that openfaas has started, run:

  kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"

рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рд╣рдо рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХрдорд╛рдВрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ:

$ kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"
NAME                READY   UP-TO-DATE   AVAILABLE   AGE
alertmanager        1/1     1            1           114s
basic-auth-plugin   1/1     1            1           114s
faas-idler          1/1     1            1           114s
gateway             1/1     1            1           114s
nats                1/1     1            1           114s
prometheus          1/1     1            1           114s
queue-worker        1/1     1            1           114s

рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛:

$ kubectl rollout status -n openfaas deploy/gateway
deployment "gateway" successfully rolled out
$ kubectl port-forward -n openfaas svc/gateway 8080:8080 &
[1] 6985
Forwarding from 127.0.0.1:8080 -> 8080
$ echo -n $PASSWORD | faas-cli login --username admin --password-stdin
Calling the OpenFaaS server to validate the credentials...
Handling connection for 8080
WARNING! Communication is not secure, please consider using HTTPS. Letsencrypt.org offers free SSL/TLS certificates.
credentials saved for admin http://127.0.0.1:8080
$ faas-cli list
Function                        Invocations     Replicas

рдореЛрдВрдЧреЛрдбрдм рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛

рд╣рдо рд╣реЗрд▓реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдм рдХреБрдЫ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

$ helm repo add stable https://kubernetes-charts.storage.googleapis.com/
"stable" has been added to your repositories
$ helm install stable/mongodb --generate-name
NAME: mongodb-1577466908
LAST DEPLOYED: Fri Dec 25 11:15:11 2019
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
** Please be patient while the chart is being deployed **

MongoDB can be accessed via port 27017 on the following DNS name from within your cluster:

    mongodb-1577466908.default.svc.cluster.local

To get the root password run:

    export MONGODB_ROOT_PASSWORD=$(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)

To connect to your database run the following command:

    kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD

To connect to your database from outside the cluster execute the following commands:

    kubectl port-forward --namespace default svc/mongodb-1577466908 27017:27017 &
    mongo --host 127.0.0.1 --authenticationDatabase admin -p $MONGODB_ROOT_PASSWORD

рд╣рдо рдЬрд╛рдБрдЪ:

kubectl run --namespace default mongodb-1577466908-client --rm --tty -i --restart='Never' --image bitnami/mongodb --command -- mongo admin --host mongodb-1577466908 --authenticationDatabase admin -u root -p $(kubectl get secret --namespace default mongodb-1577466908 -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
If you don't see a command prompt, try pressing enter.

> db.version();
4.0.14

рдХрдВрдЯреЗрдирд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП Ctrl+D рджрдмрд╛рдПрдБред

Emacs рдХреА рд╕реНрдерд╛рдкрдирд╛

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╕рдм рдХреБрдЫ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдпрд╣ рд▓реЗрдЦ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛ред

рдЧреЗрдо рдХреЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ рддреЛрдбрд╝рдирд╛

рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрд╢рди http рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд┐рднрд┐рдиреНрди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдмреАрдЪ рдПрдВрдб-рдЯреВ-рдПрдВрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг JWT рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЛрдВрдЧреЛрдбрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЛрдХрди, рд╕рд╛рде рд╣реА рдЧреЗрдо рдХреА рд╕реНрдерд┐рддрд┐, рдЦрд┐рд▓рд╛рдбрд╝реА рдбреЗрдЯрд╛, рд╕рднреА рдЧреЗрдо рдХреА рдЪрд╛рд▓реЛрдВ рдХреЗ рдХреНрд░рдо рдФрд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЖрдЗрдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

╨а╨╡╨│╨╕╤Б╤В╤А╨░╤Ж╨╕╤П

рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЗрдирдкреБрдЯ рдЧреЗрдо рдЙрдкрдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде JSON рд╣реИред рдЬрдм рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдирд╛рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИ; рдпрджрд┐ рдЬрд╛рдБрдЪ рд╕рдлрд▓ рд╣реЛрддреА рд╣реИ, рддреЛ рдЙрдкрдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИрд╢ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЦреЗрд▓ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдкреНрд░рд╡реЗрд╢

рдлрд╝рдВрдХреНрд╢рди рдЗрдирдкреБрдЯ рдЧреЗрдо рдЙрдкрдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде JSON рд╣реИ; рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХреЛрдИ рдЙрдкрдирд╛рдо рд╣реИ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рдЙрдкрдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдПрдХ JWT рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рдиреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╡реЗ рд╣реЛрддреЗ рд╣реИрдВ рдмреБрд▓рд╛рдпрд╛ред рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛ рд░рд┐рдХреЙрд░реНрдб рднреА рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбрд╛рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдВрддрд┐рдо рд▓реЙрдЧрд┐рди рд╕рдордп, рдЖрджрд┐ред

рдЦреЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВ

рдХреЛрдИ рднреА рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдХреНрд░рд┐рдп рдЦреЗрд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдЦреЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдХреНрд░рд┐рдп рдЧреЗрдо рдХреА рдПрдХ рд╕реВрдЪреА рднреА рджреЗрдЦрддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо JSON рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧреЗрдо рдХреА рд╕реВрдЪрд┐рдпрд╛рдВ (рдЧреЗрдо рдЖрдИрдбреА, рдорд╛рдирд╡-рдкрдардиреАрдп рдирд╛рдо, рдЖрджрд┐) рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдЦреЗрд▓ рдирд┐рд░реНрдорд╛рдг

рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ; рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдЗрдирдкреБрдЯ рдкрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ, рд╕рд╛рде рд╣реА рдЧреЗрдо рдкреИрд░рд╛рдореАрдЯрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рдЧреЗрдо рдореЗрдВ рдХреМрди рд╕реЗ рдЕрдХреНрд╖рд░ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рд╣реИрдВ, рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛, рдЖрджрд┐)ред рдЧреЗрдо рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЧреИрд░-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреЗрдо рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреЗрдо рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо JSON рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирд┐рд░реНрдорд╛рдг рд╕рдлрд▓рддрд╛ рдлрд╝реАрд▓реНрдб, рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдЧреЗрдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдФрд░ рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рдПрдХ рдЦреЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдирд╛

рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрдирдкреБрдЯ рдЧреЗрдо рдЖрдИрдбреА рдФрд░ рдЙрд╕рдХрд╛ рдкрд╛рд╕рд╡рд░реНрдб рд╣реИ, рдпрджрд┐ рдпрд╣ рдПрдХ рдЧреИрд░-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреЗрдо рд╣реИ, рддреЛ рдЖрдЙрдЯрдкреБрдЯ рдЧреЗрдо рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде JSON рд╣реИред рдЧреЗрдо рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рд╕рд╛рде рд╣реА рдЧреЗрдо рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛, рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рдж рдЧреЗрдо рдкреНрд░рддрд┐рднрд╛рдЧреА рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред

рдЦреЗрд▓ рдЖрдпреЛрдЬрди рджреЗрдЦрдирд╛

рдХреЛрдИ рднреА рдЕрдирдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдЗрд╡реЗрдВрдЯ рдХреА рд╕реВрдЪреА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдПрдХ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рднреА рд╕рдХреНрд░рд┐рдп рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдЗрд╡реЗрдВрдЯ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╣ рдЗрд╡реЗрдВрдЯ рдирдВрдмрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрд╡рд▓ рд╡реЗ рдШрдЯрдирд╛рдПрдБ рдЬреЛ рдмрд╛рдж рдореЗрдВ рдШрдЯрд┐рдд рд╣реБрдИрдВ, рд╕реВрдЪреА рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдБрдЧреАред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдордп-рд╕рдордп рдкрд░ рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ, рдПрдХ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдЧреЗрдо рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЕрдиреБрд░реЛрдз рднреА рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧреЗрдо рдХреЗ рдЗрд╡реЗрдВрдЯ рдбрд┐рд╕реНрдкреИрдЪ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрд╡рд╛рдм рджреЗ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдЧреЗрдо рдЗрд╡реЗрдВрдЯ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдЧреЗрдо рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЧреЗрдо рд╢реБрд░реВ рдХрд░рдирд╛, рдХреЛрдИ рдХрджрдо рдЙрдард╛рдирд╛, рд╡реЛрдЯ рдХрд░рдирд╛, рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦрдирд╛ рдЬреЛ рдЧреЗрдо рдЗрд╡реЗрдВрдЯ рдХреА рд╕реВрдЪреА рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЖрджрд┐ рд╕рдВрднрд╡ рд╣реИред
рдЧреЗрдо рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрд╡рдпрдВ рд╕рд╣рд┐рдд рдЧреЗрдо рдореЗрдВ рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рднреВрдорд┐рдХрд╛рдПрдБ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЙрд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рднреВрдорд┐рдХрд╛ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреА рд╣реЛрдЧреАред рдПрдХ рдмрд╛рд░ рд╕рднреА рднреВрдорд┐рдХрд╛рдУрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реЛ рдЬрд╛рдиреЗ рдкрд░, рдЧреЗрдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд░рд╛рддреНрд░рд┐ рдореЛрдб рдореЗрдВ рд╕реНрд╡рд┐рдЪ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЦреЗрд▓ рдХреЗ рдЖрдБрдХрдбрд╝реЗ

рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдЦреЗрд▓ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рдЦреЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐, рдЦрд┐рд▓рд╛рдбрд╝рд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдФрд░ рд╕рдВрдЦреНрдпрд╛ (рдЙрдкрдирд╛рдо), рднреВрдорд┐рдХрд╛рдПрдВ рдФрд░ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐ (рдЪрд╛рд▓ рдЪрд▓реА рдпрд╛ рдирд╣реАрдВ), рд╕рд╛рде рд╣реА рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рддреА рд╣реИред рдкрд┐рдЫрд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣, рд╕рдм рдХреБрдЫ рдХреЗрд╡рд▓ рдЧреЗрдо рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕рдордп-рд╕рдордп рдкрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп

рдпрджрд┐ рдЧреЗрдо рдмрдирд╛рддреЗ рд╕рдордп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЧреЗрдо рд▓реЙрдиреНрдЪ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдХреНрд░рд┐рдп рдЧреЗрдо рдХреА рд╕реВрдЪреА рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рдЕрдиреНрдп рдЖрд╡рдзрд┐рдХ рдХрд╛рд░реНрдп рдЙрди рдЦреЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЧреЗрдо рдореЛрдб рдХреЛ рд░рд╛рдд рд╕реЗ рджрд┐рди рдФрд░ рд╡рд╛рдкрд╕ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реИ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдЯрд░реНрди рдХреЗ рджреМрд░рд╛рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реБрдЖ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЦрд┐рд▓рд╛рдбрд╝реА рдЬрд┐рд╕реЗ рдЧреЗрдо рдЗрд╡реЗрдВрдЯ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрд╕рдиреЗ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЕрдкрдирд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рднреЗрдЬрд╛ ).

рдШреЛрд╖рдгрд╛

  • рдкрд░рд┐рдЪрдп
  • рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рд╡реЗрд╢ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛, рдХрд╛рд░реНрдп рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛
  • рдмреИрдХрдПрдВрдб рдХрд╛рд░реНрдп
  • рдЕрдЧреНрд░рднрд╛рдЧ рдХрд╛рд░реНрдп
  • рд╕реАрдЖрдИрд╕реАрдбреА рдХреА рд╕реНрдерд╛рдкрдирд╛, рдкрд░реАрдХреНрд╖рдг рдХрд╛ рдЖрдпреЛрдЬрди
  • рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЦреЗрд▓ рд╕рддреНрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ
  • рдкрд░рд┐рдгрд╛рдо

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ