
Σήμερα θα δημιουργήσουμε το λεγόμενο. Λειτουργία Yandex (επίσημο όνομα ), το οποίο συνεννοήθηκε με την υπηρεσία αλληλογραφίας θα στείλει "σαπούνι" σε χρήστες που κοιμούνται ήσυχα (απλά αστειεύομαι - ξέρω ότι είμαστε όλοι κατά των ανεπιθύμητων μηνυμάτων).
Είμαι επίσης αντίπαλος (αλλά χωρίς φανατισμό) των παραδοσιακών διακομιστών, και υποστηρικτής των λεγόμενων. χωρίς διακομιστή λύσεις (χωρίς διακομιστή), επειδή δεν μου αρέσει (και δεν ξέρω πραγματικά πώς να) διαχειρίζομαι διακομιστές, και ακόμη περισσότερο, να πληρώνω για το χρόνο που δεν φορτώνονται. Ένα άλλο πράγμα είναι οι λειτουργίες. Κάποιος τα εξυπηρετεί χωρίς εμένα και πληρώνω μόνο για κλήσεις. Στις αρχές Οκτωβρίου 2019, η Yandex παρουσίασε το Λειτουργίες Yandex Cloud - φαίνεται να είναι το πρώτο στη Ρωσική Ομοσπονδία χωρίς διακομιστή. Και αυτό που είναι ιδιαίτερα ωραίο είναι ότι για τις δεξιότητες της Αλίκης είναι γενικά ελεύθερες, επομένως είναι στην περιφερειακή μου όραση από τότε. Αλλά ας ξεκινήσουμε ήδη.
Ας φανταστούμε αυτό το σενάριο. Η αίτησή σας (για παράδειγμα, η ικανότητα της Αλίκης το οποίο, παρεμπιπτόντως, λειτουργεί επίσης Λειτουργίες Yandex) προσκαλεί τον χρήστη να αγοράσει ένα ψηφιακό προϊόν, για παράδειγμα, πρόσθετες επιλογές και ο χρήστης πραγματοποιεί μια πληρωμή. Κάποιο είδος συστήματος πληρωμών (σύγχυση παρόμοιο με ) επεξεργάζεται την πληρωμή και τη στέλνει στη διεύθυνση που παρέχετε (και θα έχουμε έναν σύνδεσμο για να καλέσουμε Λειτουργίες Yandex) HTTP-αίτημα που περιέχει στοιχεία πληρωμής, όπως ποσό, πλήρες όνομα, αριθμό τηλεφώνου και email του πληρωτή. Θέλουμε να επεξεργαστούμε αυτά τα δεδομένα με κάποιο τρόπο, για παράδειγμα: να ελέγξουμε το ποσό, να κάνουμε κατάλληλες καταχωρήσεις στη βάση δεδομένων, να στείλουμε στους χρήστες SMS и Email με επιβεβαίωση παραλαβής πληρωμής και περαιτέρω οδηγίες. Ο εαυτός σου λοιπόν microservice.
Σχετικά με το πώς από Λειτουργίες Yandex κάνετε καταχωρήσεις στη βάση δεδομένων Cloud Firestore το εξετάσαμε ήδη στο σεμινάριο (και στο μέλλον, νομίζω, θα εξετάσουμε ένα παράδειγμα για μια άλλη βάση δεδομένων - ). Σχετικά με τον τρόπο αποστολής στους χρήστες SMS και ενσωματώστε την εφαρμογή μας με Yandex.Money — θα το διευθετήσουμε στο εγγύς μέλλον. Τώρα ας ασχοληθούμε μόνο με την αποστολή επιστολών.
1. Δημιουργήστε έναν λογαριασμό στο SendGrid
ΣημείωσηΤο SendGrid είναι απλώς η επιλογή μου, την οποία έκανα για διάφορους λόγους, με κυριότερο ότι έχουν έτοιμο SDK για το Node.js. Μπορείτε να επιλέξετε οποιαδήποτε άλλη υπηρεσία αλληλογραφίας.
Ας προχωρήσουμε και συμπληρώστε τη φόρμα εγγραφής εκεί. Μετά πάμε στο Ταμπλό , στον πίνακα πλοήγησης επιλέξτε Email API -> Οδηγός ενσωμάτωσηςκαι στον κεντρικό πίνακα - API Web και πατήστε το κουμπί Επιλέξτε. Όλα είναι όπως στην εικόνα:

Στο επόμενο βήμα επιλέγουμε Node.js:

Στη συνέχεια καταλήξαμε στο δικό μας API-όνομα κλειδιού (θα εμφανίζεται μόνο στην κονσόλα στη λίστα των κλειδιών και δεν έχει καμία σχέση με τον μελλοντικό μας κώδικα. Μόλις βρήκα έναν άφθαρτο demo-api-key) και πατήστε το κουμπί Δημιουργία κλειδιού:

Το κλειδί θα δημιουργηθεί, θα το αντιγράψουμε και θα το διατηρήσουμε με τη μεγαλύτερη εμπιστοσύνη. Και θα έχουμε οθόνη με κουμπί Επαληθεύστε την ενσωμάτωση, όπως στην παρακάτω εικόνα, αλλά δεν θα κάνουμε κλικ ακόμα, αλλά ας προχωρήσουμε στη σύνταξη του κώδικα:

2. Γράψιμο κώδικα
Αλλά ο ίδιος ο κωδικός, όπως μπορείτε να δείτε, είναι γελοία μικρός - 22 γραμμές!

Στη γραμμή #8 Το email μου είναι κωδικοποιημένο (και επομένως ντροπαλά κρυμμένο) - παρακαλώ δηλώστε το δικό σας. Στην πραγματική ζωή, θα λάβουμε όλα τα δεδομένα (συμπεριλαμβανομένων ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ) από αντικείμενο συμβάν. Για παράδειγμα, εάν η μέθοδος ΜΕΤΑ ένα αντικείμενο αποστέλλεται στη συνάρτησή μας χρήστη με πεδίο (ιδιότητα) ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ, η τιμή αυτού του πεδίου μπορεί να ληφθεί ως εξής:
const { user } = event;
const email = user.email; Και αν η διεύθυνση email μεταβιβαστεί στη συνάρτηση χρησιμοποιώντας τη μέθοδο ΠΑΡΤΕ, για παράδειγμα: https://functions.yandexcloud.net/123abc?email=user@example.com
παράμετρος znachenie ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ μπορείτε να το πάρετε ως εξής:
const email = event.queryStringParameters.email;Για να ρίξετε μια ματιά στο τι ακριβώς περιέχεται σε ένα αντικείμενο συμβάν, μπορείτε να δημιουργήσετε το πιο απλό Λειτουργία Yandex και στρίψτε το με ερωτήματα:
module.exports.handler = async function (event) {
return {
'statusCode': 200,
'body': JSON.stringify(event)
};
};Αυτό συζητείται με περισσότερες λεπτομέρειες (αλλά λιγότερο ξεκάθαρα) στην επίσημη τεκμηρίωση .
Έτσι, δημιουργήστε έναν κατάλογο έργου (για παράδειγμα, αποστολέας), μεταβείτε σε αυτό, αρχικοποιήστε το έργο, εγκαταστήστε εξαρτήσεις:
mkdir mailer
cd mailer
npm init -y
npm i @sendgrid/mail email-validator dotenv
Εδώ απαιτείται μόνο το πακέτο @sendgrid/mail. Πλαστική σακούλα email-επικυρωτή ελέγχει τη διεύθυνση email για εγκυρότητα (πώς δεν το μάντεψα αμέσως;), αλλά αν είμαστε σίγουροι για αυτό (έχει ελεγχθεί ήδη εδώ και πολύ καιρό χωρίς εμάς), δεν χρειάζεται να το εγκαταστήσουμε (και, φυσικά, δεν χρειάζεται να το ελέγξουμε στον κωδικό). Πλαστική σακούλα Ντότενβ έχει σχεδιαστεί για να διαβάζει εγγραφές από ένα αρχείο .env ως μεταβλητές χρόνου εκτέλεσης. Αλλά μέσα Λειτουργίες Yandex Είναι δυνατό να τοποθετηθούν αυτές οι μεταβλητές απευθείας στο περιβάλλον χρόνου εκτέλεσης. Πως; - Θα το δείξω παρακάτω. Επομένως το πακέτο Ντότενβ μπορείτε επίσης να μην το εγκαταστήσετε, και το αρχείο .env - μην δημιουργείτε, και ταυτόχρονα ο κώδικας βρίσκεται στο αρχείο index.js μην αλλάξεις. Εδώ όμως έχουμε εγκαταστήσει αυτό το πακέτο, οπότε δημιουργούμε αρχεία index.js и .env:
touch index.js
touch .env
Στο αρχείο index.js γράψτε 22 γραμμές κώδικα που φαίνεται στο παραπάνω στιγμιότυπο οθόνης (μόνο στη γραμμή #8 αλλάξτε το email σας) και στο αρχείο .env - (χωρίς εισαγωγικά ή σημεία στίξης) καθορίστε το όνομα/τιμή του ζεύγους - κλειδιού APIπου λάβαμε πρόσφατα στην κονσόλα SendGrid:
SENDGRID_API_KEY=κλειδί-πολύ-μυστικό-sendgrid-api-key
Και αν θέλετε λιγότερη δουλειά, κλωνοποιήστε το αποθετήριο και εγκαταστήστε τα πακέτα:
git clone https://github.com/stmike/ycf-sendgrid-mailer-tutorial.git
cd ycf-sendgrid-mailer-tutorial
npm i
Στο αρχείο index.js, στη σειρά #8 αλλαγή email? δημιουργήστε ένα αρχείο στον ριζικό κατάλογο .env, και σε αυτό αναφέρετε το όνομα/την τιμή του κλειδιού API, όπως φαίνεται ακριβώς παραπάνω.
3. Ανάπτυξη
Λίγο πολύ ξεκάθαρα και αναλυτικά για Yandex.Cloud και πώς να το τοποθετήσετε εκεί Λειτουργίες Yandex περιγράφεται στο άρθρο μου - Στέλνω τους αδαείς σε αυτή τη χώρα, και για όλους τους άλλους (και όσους επέστρεψαν) - μετά ένα μικρό κόμικ (δηλαδή μια σειρά από εικόνες και κείμενο).
Δημιουργώ zip-αρχείο (ας το ονομάσουμε, για παράδειγμα, mailer.zip), στον οποίο συμπεριλαμβάνουμε τον κατάλογο node_modules καταθέτω .env, index.js - τα πάντα από τον κατάλογο έργων μας:

Δημιουργούμε μια συνάρτηση με το όνομα... σωστά - αποστολέας, στο αριστερό μενού πλοήγησης μπαίνουμε Ο συντάκτης, συμπληρώστε τα απαιτούμενα πεδία και μεταβείτε στην καρτέλα Αρχείο ZIP κατεβάστε το αρχείο μας mailer.zip:

Και εδώ είναι η προαναφερθείσα επιλογή για λήψη Κλειδί API απευθείας εδώ, αντί να δημιουργήσετε ένα αρχείο στο έργο .env, και μην εγκαταστήσετε το πακέτο Ντότενβ. Αλλά τα έχουμε ήδη κάνει όλα αυτά, οπότε το δείχνω μόνο για ενημέρωση. Δηλαδή δεν χρειάζεται διπλότυπο!

Τώρα στην επάνω δεξιά γωνία κάντε κλικ στο κουμπί Δημιουργία έκδοσηςκαι περιμένετε μερικά δευτερόλεπτα. Όταν όλα είναι έτοιμα, θα μεταβούμε αυτόματα στην ενότητα Αναθεώρηση. Εκεί θα ενεργοποιήσουμε την επιλογή δημόσια λειτουργίαώστε να μπορείτε να αλληλεπιδράσετε μαζί του από τον έξω κόσμο.

Βλέπετε τον μπλε σύνδεσμο απέναντι από την επιγραφή Σύνδεσμος για κλήση? Κάντε κλικ σε αυτό. Θα ανοίξει ένα κενό παράθυρο του προγράμματος περιήγησης... Αλλά περιμένετε - έλαβα ένα email:

Τώρα μπορείτε να επιστρέψετε στην κονσόλα SendGridκαι πατήστε το κουμπί Επαληθεύστε την ενσωμάτωση. Το σύστημα θα ελέγξει τα πάντα μέσω των καναλιών του και ως αποτέλεσμα θα πρέπει να επιστρέψει μια οθόνη όπως αυτή:

Αυτό είναι, παιδιά (και κορίτσια, φυσικά) - όλα είναι πραγματικά πολύ απλά και κομψά! Θα υπάρξουν περισσότερα άρθρα. Αν κάποιος ενδιαφέρεται να διαβάσει κάτι τέτοιο, κάντε εγγραφή για να μην χάσετε.
4. Δωρεές
Πηγή: www.habr.com
