Donnez vie à vos idées. Application sans serveur - instructions étape par étape



En 2018, sans serveur est le moyen le plus rapide de crĂ©er un backend d'application, mĂȘme si vous ne l'avez jamais fait. Oui, je connais d'innombrables constructeurs d'applications, MBaaS ou BaaS, mais je veux montrer que sans serveur convient non seulement aux applications Ă©lĂ©mentaires, mais aussi aux backends complexes Ă©volutifs qui ne peuvent pas ĂȘtre effectuĂ©s sur le constructeur.

L'autre jour, nous avons lancé le premier cloud sans serveur en Russie - Rusonyx Serverless basé sur la plate-forme Swifty . Les trois premiers mois d'utilisation de la plateforme sont gratuits, donc tout le monde peut essayer l'approche sans serveur.

Dans l'article, je vais vous expliquer comment crĂ©er une application simple Ă  faire avec authentification, profil utilisateur, stockage d'images et, en fait, gestion des tĂąches en utilisant l'approche sans serveur. Nous le ferons naturellement sur Swifty, mais l'approche ici est Ă  peu prĂšs la mĂȘme pour toutes les solutions sans serveur. Un exemple de l'application terminĂ©e peut ĂȘtre trouvĂ© ici . Le frontend est Ă©crit dans vue.js, que nous exĂ©cuterons sur le stockage d'objets intĂ©grĂ© (S3), le backend se fera sur les fonctions de Go et Python.

Vous n'avez pas besoin de connaĂźtre JavaScript, goshechki et python pour rĂ©ussir ce guide. Le code source de l'application peut ĂȘtre rĂ©cupĂ©rĂ© ici .

Authentification des utilisateurs


Dans un premier temps, nous allons crĂ©er les fonctions elles-mĂȘmes pour le backend de l'application. Tout d'abord, vous avez besoin d'un compte dans Swifty, que vous pouvez crĂ©er ici . AprĂšs vous ĂȘtre connectĂ© au tableau de bord, vous devriez voir cet Ă©cran.



Maintenant que vous avez un compte, vous pouvez commencer Ă  crĂ©er les fonctions elles-mĂȘmes. Swifty comprend un service d'authentification - Authentification, qui fournit les opĂ©rations de base d'inscription, de connexion et de dĂ©connexion, ainsi que la possibilitĂ© de crĂ©er, modifier, rĂ©cupĂ©rer et supprimer un profil utilisateur. Il a Ă©galement une intĂ©gration Facebook et la possibilitĂ© de lier un profil dĂ©jĂ  crĂ©Ă© Ă  un profil Facebook. Mais nous n'en avons pas encore besoin. Peut-ĂȘtre plus tard.

Créez un service d'authentification :

  • Ouvrez Swifty -> Services d'authentification.
  • Cliquez sur CrĂ©er une base de donnĂ©es d'authentification et nommez la base de donnĂ©es todoapp. Je vais continuer Ă  utiliser ce nom, mais vous pouvez nommer votre base comme vous le souhaitez.

En conséquence, beaucoup de choses seront créées :

  1. Fonction todoapp.base - rend les utilisateurs d'inscription, de connexion et de déconnexion, implémente le protocole OAuth 2.0.
  2. Fonction todoapp.fb - vous permet d'authentifier les utilisateurs via fb.
  3. Fonction todoapp.link - relie les comptes d'utilisateurs déjà créés à leurs comptes sur fb.
  4. Fonction todoapp.profiles - crée, met à jour, supprime les profils utilisateur dans MongoDB.
  5. Todoapp_mgo DB - Mongo pour stocker les comptes d'utilisateurs.
  6. Todoapp_profiles - Mongo DB pour le stockage des profils utilisateur.
  7. L'authentification Middleware (AuthMW) est un proxy qui permet, lors de l'accÚs à la fonction API, de vérifier l'authentification de l'utilisateur en vérifiant son jeton JWT, qui lui a été émis par la fonction todoapp.base. Il n'y a pas de jeton ou ce n'est pas correct - la demande à l'API sera rejetée.

Nous utilisons "." au nom des fonctions pour les séparer en dossiers. Par conséquent, si vous créez une nouvelle fonction avec le nom todoapp.newfunction, elle ira automatiquement dans le dossier todoapp et y apparaßtra sous le nom newfunction. Votre liste de fonctions devrait maintenant contenir l'ensemble suivant (voir image).



Vous pouvez sauter, mais mieux lire


Ce paragraphe, en principe, peut ĂȘtre ignorĂ©. Ou non, si vous voulez comprendre comment fonctionne notre service d'authentification et en savoir un peu plus sur le fonctionnement de Swifty. La fonction todoapp.base, Ă©crite en Go, fournit des capacitĂ©s d'authentification de base, mais rien ne vous empĂȘche d'Ă©tendre ses capacitĂ©s pour rĂ©pondre aux besoins de votre application. Peu importe comment vous le modifiez, sans toucher Ă  la connexion et Ă  la dĂ©connexion, il fera toujours son travail. La fonction a une variable SWIFTY_AUTH_NAME, qui stocke le nom AuthMW. Une fonction doit Ă©galement avoir accĂšs Ă  MongoDB et AuthMW lui-mĂȘme, qui sont enregistrĂ©s sur l'onglet AccĂšs dans les propriĂ©tĂ©s de la fonction. Elle possĂšde Ă©galement un dĂ©clencheur d'API REST qui a un lien qui doit ĂȘtre appelĂ© pour accĂ©der Ă  la fonction.

La fonction todoapp.base s'attend à ce que vous lui transmettiez l'ID utilisateur et le mot de passe comme arguments de demande. Le mot de passe est crypté.

Voici des exemples de telles requĂȘtes:

* Sign up: https://api.swifty.cloud:8686/call/012.../signup&userid=user@yourmail.com&password=xxxxxxxx * Sign in: https://api.swifty.cloud:8686/call/012.../signin&userid=user@yourmail.com&password=xxxxxxxx * Log out: https://api.swifty.cloud:8686/call/012.../leave&userid=user@yourmail.com 

Si, par exemple, la connexion a rĂ©ussi (la fonction a vĂ©rifiĂ© avec succĂšs le mot de passe transmis), vous recevrez JSON avec un jeton JWT, qui devra ĂȘtre utilisĂ© chaque fois que vous accĂ©dez Ă  des fonctions pour lesquelles l'authentification est activĂ©e. Un jeton JWT est crĂ©Ă© sur la base du schĂ©ma d'authentification du support. Pour plus d'informations sur OAuth 2.0 et le schĂ©ma de support, cliquez ici .

Si l'authentification échoue, la fonction appelée ne démarre pas et la demande renvoie le code 401.

Gestion du profil utilisateur


Ainsi, chaque fonction possÚde une URL REST API, un lien que vous devez appeler pour exécuter la fonction. Pour obtenir ce lien pour la fonction d'authentification, ouvrez la fonction todoapp.base, accédez à l'onglet Déclencheurs, copiez l'URL de l'API REST et enregistrez-la quelque part sous AUTH_URL. Un peu plus loin, nous devons insérer ce lien dans le fichier de configuration du frontend de notre application.



Nous avons également besoin d'une URL d'API pour todoapp.profiles afin que notre application puisse gérer les profils utilisateur. Ouvrez cette fonction, accédez à l'onglet Déclencheurs, copiez l'URL de l'API REST et enregistrez-la sous PROFILE_URL.

Gestion des avatars des utilisateurs


Notre application vous permet Ă©galement de tĂ©lĂ©charger des avatars d'utilisateur et de montrer comment stocker des fichiers sur le stockage d'objets intĂ©grĂ©. L'image de l'utilisateur est tĂ©lĂ©chargĂ©e Ă  l'aide d'une fonction spĂ©ciale et stockĂ©e sur le stockage d'objets intĂ©grĂ©. L'accĂšs Ă  l'image peut ĂȘtre obtenu via la fonction ou Ă  l'aide de l'API S3 standard, dont les clĂ©s d'accĂšs peuvent ĂȘtre obtenues sur l'onglet de contrĂŽle Object Storage de l'interface utilisateur.

Pour créer une fonction de gestion des images:

  1. AccĂ©dez Ă  l'onglet Fonctions -> Nouvelle fonction -> Depuis le rĂ©fĂ©rentiel (modĂšles). Nous stockons tous les modĂšles de fonctions dans le dĂ©pĂŽt public git swifty.demo. Ce rĂ©fĂ©rentiel doit ĂȘtre sĂ©lectionnĂ© par dĂ©faut.
  2. Sélectionnez la fonction de gestion des avatars (python), cliquez sur Suivant et entrez le nom de la nouvelle fonction todoapp.avatar. Cliquez sur Créer.
  3. Ensuite, accédez à l'onglet Déclencheurs, cliquez sur Ajouter un déclencheur, sélectionnez l'API REST (URL). Copiez le lien qui apparaßt et enregistrez-le sous PICTURE_URL.

Ensuite, vous devez créer un compartiment dans le stockage d'objets pour stocker les images utilisateur:

  1. Accédez à l'onglet Object Storage -> Create Bucket. Nommez le nouveau compartiment todoappimages.
  2. Accédez à l'onglet Fonctions -> todoapp.avatar -> AccÚs -> cliquez sur Ajouter, sélectionnez Stockage d'objets, le compartiment todoappimgaes nouvellement créé et cliquez sur Ajouter.

Maintenant, notre fonction a accÚs au compartiment spécifié. C'est tellement simple et nous n'avons pas besoin d'enregistrer les accÚs au compartiment dans la fonction. La seule chose que nous devons spécifier est la fonction dans laquelle le compartiment pour stocker les images à l'aide d'une variable d'environnement:

  1. Accédez à l'onglet Fonctions -> todoapp.avatar -> Variables et cliquez sur Créer une variable.
  2. Entrez le nom de la variable - BUCKET_NAME et sa valeur - todoappimages.

Gestion des tĂąches


En fait, nous faisons une application de gestion des tùches et il est temps de faire enfin la fonction correspondante. Nous avons un modÚle pour cela qui vous permet de créer une tùche, de la marquer comme terminée et de supprimer la tùche.

Créez une fonction:

  1. Accédez à l'onglet Fonctions -> Nouvelle fonction -> Depuis le référentiel (modÚles).
  2. Sélectionnez la fonction d'application TODO (python), cliquez sur Suivant et entrez le nom de la nouvelle fonction todoapp.tasks. Cliquez sur Créer.
  3. Ensuite, accédez à l'onglet Déclencheurs, cliquez sur Ajouter un déclencheur, sélectionnez l'API REST (URL). Copiez le lien qui apparaßt et enregistrez-le sous TASKS_URL.

Ensuite, nous avons besoin d'une base de données pour stocker nos tùches. L'option la plus simple est MongoDB.

  1. Accédez à l'onglet Mongo Database -> Create Database et créez une base de données appelée todoapp_tasks.
  2. Allez dans l'onglet Fonctions -> todoapp.tasks -> AccÚs -> Ajouter et ajouter une nouvelle base de données.

Maintenant, notre fonction a accÚs à la base de données todoapp_tasks et nous pouvons y accéder à partir de la fonction en utilisant la bibliothÚque swifty, par exemple comme ceci:

db = swifty.MongoDatabase(os.getenv('TASKS_DB_NAME'))

Il suffit d'enregistrer une variable d'environnement avec le nom de la base de données:

  1. Accédez à l'onglet Fonctions -> todoapp.tasks -> Variables et cliquez sur Créer une variable.
  2. Entrez le nom de la variable - TASKS_DB_NAME et sa valeur - todoapp_tasks.

Activer l'authentification pour les fonctionnalités


Lorsque nous avons un backend pour l'authentification des utilisateurs et les fonctions elles-mĂȘmes qui composent le backend de notre application, nous pouvons activer l'authentification pour eux afin que seuls les utilisateurs autorisĂ©s puissent accĂ©der aux fonctions de gestion de profil, d'avatar et de tĂąche.

Comment activer la vérification des jetons pour certaines fonctions:

  1. Accédez à l'onglet Fonctions et sélectionnez les fonctions todoapp.tasks et todoapp.avatar.
  2. Cliquez sur Gérer l'authentification et sélectionnez le service todoapp, cliquez sur Activer.

Désormais, les fonctions todoapp.tasks et todoapp.avatar seront exécutées uniquement pour les utilisateurs avec le jeton JWT correct généré à l'aide de todoapp.base.

AprĂšs toutes les actions ci-dessus, la liste de nos fonctions devrait ressembler Ă  ceci.



Publier l'application


Traitons le frontend de notre application. Le frontend est écrit dans vue.js et nous avons juste besoin d'ajouter des liens vers nos fonctions dans son fichier de configuration et de reconstruire l'application avec cette configuration mise à jour. Tout est simple ici et aucune connaissance de vue.js et JavaScript n'est nécessaire.

Pour reconstruire l'application, vous devez installer node.js. Si vous ne l'avez pas, veuillez utiliser le guide officiel pour le mettre. Si vous avez un Mac, alors il y a un bon guide ici . Vous aurez également besoin de git pour extraire le référentiel sur votre ordinateur. Veuillez faire:

 # git clone https://github.com/swiftycloud/swifty.todoapp 

AprÚs cela, accédez au dossier /swifty.todoapp/src et ouvrez le fichier config.js dans votre éditeur préféré. Vous devez remplacer les variables qui y sont contenues par celles que vous avez enregistrées précédemment:

export const AUTH_URL = "https://api.swifty.cloud/call/991..."
export const PROFILE_URL = "https://api.swifty.cloud/call/281..."
export const PICTURE_URL = "https://api.swifty.cloud/call/e6a..."
export const TASKS_URL = "https://api.swifty.cloud/call/4b1..."


Nous n'avons pas encore besoin de variables liées à FB.

Ensuite, vous devez reconstruire l'application:

 # npm run build 

...
TerminĂ© Construction terminĂ©e. Le rĂ©pertoire dist est prĂȘt Ă  ĂȘtre dĂ©ployĂ©.

Avant de créer l'application, vous pouvez également la tester localement:

 # npm run serve 

et y accéder via un navigateur à http: // localhost: 8080

Nous utilisons Object Storage pour stocker les fichiers statiques de notre application. Accédez à l'onglet Stockage d'objets, créez un compartiment todoapp et téléchargez-y des fichiers depuis le dossier /swifty.todoapp/dist/ observant les noms de dossier (vous devrez les créer à la main).

La derniĂšre Ă©tape consiste Ă  publier l'application. Cliquez sur Plus -> ParamĂštres du serveur HTTP et activez le serveur HTTP pour votre compartiment. Copiez le lien qui apparaĂźt et suivez-le - c'est votre application!



Vous pouvez maintenant y crĂ©er un compte et l'essayer en action. Si vous allez maintenant Ă  l'Ă©cran des fonctions, vous verrez que les fonctions viennent d'ĂȘtre lancĂ©es - pour l'authentification, le chargement de profil, etc.

Et ensuite?


Nous avons montré un exemple simple de la façon d'utiliser sans serveur pour créer des applications. Nous avons encore de nombreux modÚles de fonctions populaires, et vous, j'en suis sûr, avez beaucoup plus d'idées pour de nouvelles applications. Essayez des modÚles, écrivez vos fonctions et concrétisez vos idées.

Et bien sûr, veuillez contacter si vous avez des questions sur le serveur sans serveur en général et Swifty en particulier.

Profitez-en!

Source: https://habr.com/ru/post/fr430296/


All Articles