Мы создадим пример приложения для электронной коммерции, состоящего из нескольких отдельных приложений: внешнего интерфейса (который обслуживает контент для конечного пользователя в виде веб-страниц); внутренний API (который вызывается внешним интерфейсом по мере необходимости) и микросервис, который выполняет только одну задачу, но выполняет ее очень хорошо (динамическое создание счетов в формате PDF и отправка их клиентам в виде вложения электронной почты).
Приложение будет продавать отдельные предметы, а также позволит пользователям приобретать ежемесячную подписку. Все транзакции по кредитным картам будут обрабатываться через Stripe, которая, возможно, является одной из самых популярных систем обработки платежей, доступных сегодня, и не зря: разработчики ее любят. Stripe предлагает богатый API (интерфейс прикладного программирования), он доступен более чем в 35 странах мира и работает с более чем 135 валютами. Буквально миллионы организаций и предприятий используют программное обеспечение и API-интерфейсы Stripe для приема платежей, отправки выплат и управления своим бизнесом в Интернете с помощью панели инструментов Stripe. Однако во многих случаях разработчики хотят иметь возможность создавать более индивидуальные решения и не требовать от конечных пользователей входа как в веб-приложение, так и в панель управления Stripe. Это именно то, что мы будем рассматривать в этом курсе.
Мы начнем с простого виртуального терминала, который можно использовать для обработки так называемых транзакций «при отсутствии карты». Это будет полнофункциональное веб-приложение, созданное с нуля на Go (иногда называемом Golang). Внешний интерфейс будет отображаться с использованием богатого пакета html/template Go, а аутентифицированные пользователи смогут обрабатывать платежи по кредитным картам из защищенной формы, интегрированной с Stripe API. В этом разделе курса мы рассмотрим следующее:
Как создать безопасное, готовое к работе веб-приложение на Go
Как получить необходимую информацию для безопасной онлайн-транзакции по кредитной карте
Как вызвать Stripe API из серверной части Go для создания платежного намерения (объект Stripe для авторизации и совершения транзакции)
Как только это будет завершено, мы создадим второе веб-приложение в следующем разделе курса, состоящее из простого веб-сайта, который позволяет пользователям приобретать продукт или приобретать ежемесячную подписку. Опять же, это будет веб-приложение, созданное с нуля на Go. В этом разделе курса мы рассмотрим следующее:
Как разрешить пользователям покупать один продукт
Как разрешить пользователям приобретать повторяющуюся ежемесячную подписку (план Stripe)
Как обрабатывать отмены и возвраты
Как сохранить всю информацию о транзакциях в базе данных (для возвратов, отчетности и т. д.).
Как вернуть транзакцию
Как отменить подписку
Как защитить доступ к внешнему интерфейсу (через сеансовую аутентификацию)
Как защитить доступ к серверному API (используя токены с отслеживанием состояния)
Как управлять пользователями (добавлять/редактировать/удалять)
Как разрешить пользователям безопасно и надежно сбрасывать свои пароли
Как выйти из системы и мгновенно удалить свою учетную запись через веб-сокеты
Как только это будет завершено, мы начнем работу над микросервисом. Микросервис — это особый подход к разработке программного обеспечения, основной предпосылкой которого является создание очень маленьких приложений, которые делают одну вещь, но делают это очень хорошо. Микросервис нисколько не заботится о том, какое приложение его вызывает; оно совершенно отдельно и совершенно агностично. Мы создадим микросервис, который делает следующее:
Принимает полезную нагрузку JSON, описывающую отдельную покупку.
Создает счет в формате PDF с информацией из полезной нагрузки JSON.
Создает электронное письмо клиенту и прикрепляет к нему PDF-файл
Отправляет электронное письмо
Все эти компоненты (внешний интерфейс, серверная часть и микросервис) будут созданы с использованием единой кодовой базы, которая создает несколько двоичных файлов с помощью Gnu Make.
Посмотреть больше
Это пробный урок. Оформите подписку, чтобы получить доступ ко всем материалам курса. Премиум
Урок 1.
00:05:07
Introduction
Урок 2.
00:01:02
A bit about me
Урок 3.
00:01:07
Mistakes. We all make them.
Урок 4.
00:01:15
How to ask for help
Урок 5.
00:00:52
Installing Go
Урок 6.
00:01:18
Installing an IDE
Урок 7.
00:00:28
Get a free Stripe account
Урок 8.
00:01:28
Installing make
Урок 9.
00:02:14
Installing MariaDB
Урок 10.
00:00:52
Getting a database client
Урок 11.
00:02:17
What we're going to build
Урок 12.
00:14:57
Setting up a (trivial) web application
Урок 13.
00:20:40
Setting up routes and building a render function
Урок 14.
00:08:57
Displaying one page
Урок 15.
00:03:11
A better extension for Go templates and VS Code
Урок 16.
00:11:33
Creating the form
Урок 17.
00:10:44
Connecting our form to stripe.js
Урок 18.
00:07:49
Client side validation
Урок 19.
00:15:46
Getting the paymentIntent - setting up the back end package
Урок 20.
00:09:34
Getting the paymentIntent - starting work on the back end api
Урок 21.
00:10:52
Getting the paymentIntent - setting up a route and handler, and using make
Урок 22.
00:08:48
Getting the paymentIntent - finishing up our handler
Урок 23.
00:09:02
Updating the front end JavaScript to call our paymentIntent handler
Урок 24.
00:17:35
Getting the payment intent, and completing the transaction
Урок 25.
00:11:51
Generating a receipt
Урок 26.
00:04:08
Cleaning up the API url and Stripe Publishable Key on our form
Урок 27.
00:01:36
What are we going to build?
Урок 28.
00:01:34
Create the database
Урок 29.
00:08:19
Connecting to the database
Урок 30.
00:05:57
Creating a product page
Урок 31.
00:04:20
Creating the product form
Урок 32.
00:04:29
Moving JavaScript to a reusable file
Урок 33.
00:09:25
Modifying the handler to take a struct
Урок 34.
00:04:56
Update the Widget page to use data passed to the template
Урок 35.
00:03:28
Creating a formatCurrency template function
Урок 36.
00:04:13
Testing the transaction functionality
Урок 37.
00:10:43
Creating a database table for items for sale
Урок 38.
00:02:57
Running database migrations
Урок 39.
00:10:21
Creating database models
Урок 40.
00:05:52
Working on database functions
Урок 41.
00:03:59
Inserting a new transaction
Урок 42.
00:02:21
Inserting a new order
Урок 43.
00:05:21
An aside: fixing a problem with calculating the amount
Урок 44.
00:13:49
Getting more information about a transaction
Урок 45.
00:10:20
Customers
Урок 46.
00:10:11
Getting started saving customer and transaction information
Урок 47.
00:02:19
Create the save customer database method
Урок 48.
00:16:29
Saving the customer, transaction, and order from the handler
Урок 49.
00:06:35
Running a test transaction
Урок 50.
00:08:22
Fixing a database error, and saving more details
Урок 51.
00:06:36
Redirecting after post
Урок 52.
00:15:59
Simplifying our PaymentSucceeded handler
Урок 53.
00:09:38
Revising our Virtual Terminal
Урок 54.
00:01:40
Fixing a mistake in the formatCurrency template function
Урок 55.
00:02:02
What are we going to build in this section?
Урок 56.
00:03:06
Creating a Plan on the Stripe Dashboard
Урок 57.
00:04:40
Creating stubs for the front end page and handler
Урок 58.
00:09:20
Setting up the form
Урок 59.
00:07:04
Working on the JavaScript for plans
Урок 60.
00:04:50
Continuing with the Javascript for subscribing to a plan
Урок 61.
00:06:29
Create a handler for the POST request after a user is subscribed
Урок 62.
00:08:52
Create methods to create a Stripe customer and subscribe to a plan
Урок 63.
00:06:12
Updating our handler to complete a subscription
Урок 64.
00:10:00
Saving transaction & customer information to the database
Урок 65.
00:14:30
Saving transaction & customer information II
Урок 66.
00:07:17
Displaying a receipt page for the Bronze Plan
Урок 67.
00:03:46
Introduction
Урок 68.
00:07:04
Creating a login page
Урок 69.
00:03:25
Writing the stub javascript to authenticate against the back end
Урок 70.
00:13:38
Create a route and handler for authentication
Урок 71.
00:04:14
Create a writeJSON helper function
Урок 72.
00:05:58
Starting the authentication process
Урок 73.
00:03:08
Creating an invalidCredentials helper function
Урок 74.
00:06:20
Creating a passwordMatches helper function
Урок 75.
00:01:46
Making sure that everything works
Урок 76.
00:07:26
Create a function to generate a token
Урок 77.
00:03:56
Generating and sending back a token
Урок 78.
00:07:32
Saving the token to the database
Урок 79.
00:08:05
Saving the token to local storage
Урок 80.
00:09:24
Changing the login link based on authentication status
Урок 81.
00:11:22
Checking authentication on the back end
Урок 82.
00:00:47
A bit of housekeeping
Урок 83.
00:04:51
Creating stub functions to validate a token
Урок 84.
00:04:29
Extracting the token from the authorization header
Урок 85.
00:06:17
Validating the token on the back end
Урок 86.
00:05:23
Testing out our token validation
Урок 87.
00:01:17
Challenge: Checking for expiry
Урок 88.
00:06:20
Solution to challenge
Урок 89.
00:03:35
Implementing middleware to protect specfic routes
Урок 90.
00:02:27
Trying out a protected route
Урок 91.
00:10:17
Converting the Virtual Terminal post to use the back end
Урок 92.
00:13:09
Changing the virtual terminal page to use fetch
Урок 93.
00:02:40
Verifying the saved transaction
Урок 94.
00:05:36
Writing middleware on the front end to check authentication
Урок 95.
00:09:25
Protecting routes on the front end
Урок 96.
00:04:23
Logging out from the front end
Урок 97.
00:05:31
Saving sessions in the database
Урок 98.
00:09:49
Password resets
Урок 99.
00:14:16
Sending mail Part I
Урок 100.
00:01:49
Mailtrap.io
Урок 101.
00:10:46
Sending mail Part II
Урок 102.
00:10:13
Creating our mail templates and sending a test email
Урок 103.
00:12:45
Implementing signed links for our email message
Урок 104.
00:06:34
Using our urlsigner package
Урок 105.
00:06:20
Creating the reset password route and handler
Урок 106.
00:06:46
Setting up the reset password page
Урок 107.
00:09:13
Creating a back end route to handle password resets
Урок 108.
00:03:22
Setting an expiry for password reset emails
Урок 109.
00:12:20
Adding an encryption package
Урок 110.
00:05:28
Using our encryption package to lock down password resets
Урок 111.
00:07:31
Improving our front end and setting up an Admin menu
Урок 112.
00:06:23
Setting up stub pages for sales and subscriptions
Урок 113.
00:03:32
Updating migrations and resetting the database
Урок 114.
00:04:58
Listing all sales: database query
Урок 115.
00:05:59
Listing all sales: database function
Урок 116.
00:02:03
Listing all sales: writing the API handler and route
Урок 117.
00:06:27
Listing all sales: front end javascript
Урок 118.
00:05:26
Displaying our results in a table
Урок 119.
00:04:53
Making our table prettier, and adding some checks in JavaScript
Урок 120.
00:02:09
Solution to challenge
Урок 121.
00:11:25
Displaying a sale: part 1
Урок 122.
00:05:01
Displaying a sale: part 2
Урок 123.
00:04:45
Displaying a subscription
Урок 124.
00:01:02
Refunds from the Stripe Dashboard
Урок 125.
00:03:23
Adding a refund function to our cards package
Урок 126.
00:06:56
Creating an API handler to process refunds
Урок 127.
00:14:11
Update the front end for refunds
Урок 128.
00:03:20
Improving the front end
Урок 129.
00:09:06
Adding UI components to the sales page
Урок 130.
00:04:02
Updating status to refunded in the database
Урок 131.
00:04:01
Capturing the subscription id
Урок 132.
00:03:04
Adding a CancelSubscription function to our cards package
Урок 133.
00:05:34
Creating a handler to cancel a subscription
Урок 134.
00:05:42
Modifying the front end
Урок 135.
00:03:22
Finishing up the front end
Урок 136.
00:06:47
Creating a database method to paginate all orders
Урок 137.
00:04:02
Modifying the AllSales handler to use paginated data
Урок 138.
00:05:38
Updating the all-sales.page.gohtml template
Урок 139.
00:09:33
Improving pagination on the front end
Урок 140.
00:04:20
Adding listeners to page navigation buttons
Урок 141.
00:03:18
Taking user to correct page of data on click
Урок 142.
00:02:15
How I implemented pagination on the all subscriptions page
Урок 143.
00:06:00
Setting up templates to manage users
Урок 144.
00:02:30
Adding routes and handlers on the front end
Урок 145.
00:10:29
Writing the database functions to manage users
Урок 146.
00:01:59
Creating a handler and route for all users on the back end
Урок 147.
00:02:32
Updating the front end to call AllUsers
Урок 148.
00:04:03
Displaying the list of users
Урок 149.
00:07:04
Creating a user add/edit form
Урок 150.
00:05:53
Call the api back end to get one user
Урок 151.
00:06:44
Populating the user form, and a challenge
Урок 152.
00:02:56
Solution to challenge
Урок 153.
00:05:45
Saving an edited user - part one
Урок 154.
00:08:43
Saving an edited user - part two
Урок 155.
00:07:43
Deleting a user
Урок 156.
00:03:29
Removing the deleted users token from the database
Урок 157.
00:18:50
Setting up websockets
Урок 158.
00:06:25
Connecting to WebSockets from the browser
Урок 159.
00:06:00
Logging the deleted user out over websockets
Урок 160.
00:01:37
What are microservices?
Урок 161.
00:14:08
Setting up a simple microservice
Урок 162.
00:06:44
Receiving data with our micrsoservice
Урок 163.
00:20:22
Generating an invoice as a PDF
Урок 164.
00:05:30
Testing our PDF
Урок 165.
00:08:15
Mailing the invoice
Урок 166.
00:09:41
Call the microservice when a Widget is sold
Урок 167.
00:01:35
Challenge
Урок 168.
00:02:36
Solution
Урок 169.
00:06:50
Setting up a validation package
Урок 170.
00:03:31
Adding validation on the API back end
Урок 171.
00:09:21
Modifying the front end javascript
Урок 172.
00:02:25
gRPC, SOA, and more
Автор - udemy
udemy
Udemy - одна из самых больших площадок в мире по доставке обучающего контента от разных авторов всего мира. Присутсвуют курсы практически на любую тему.
Команда внимательно читает ваши комментарии и оперативно на них реагирует. Вы можете спокойно оставлять запросы на обновления или задавать любые вопросы о курсе здесь.
Golang уже называют многообещающим - он простой в изучении, быстрый, эффективный и точно останется с нами надолго. На курсе мы научим вас создавать свой API сервер с помощью Golang, запускать контейнеры, взаимодействовать с Docker из Go, работать с кастомными операторами и многим другим приятным и полезным штукам.
(Pre-Sale) Build a ClubHouse Clone with Golang and NextJS
Узнайте, как использовать Golang, Pion и NextJS для создания клона ClubHouse. В этом курсе мы будем использовать ion-sfu, построенный поверх Pion, pion — это реализация webrtc на чистом Go для нашего backend сервера, а на фронтенде мы будем использовать NextJS. ** ClubHouse Clone означает клонирование функций и логики, пользовательский интерфейс был переработан.
Практикум для разработчиков на Golang. 90% практики. Онлайн-практикум для освоения Golang (Go). 25+ заданий. Выполни все задания и стань разработчиком на Go в российских или международных проектах.
Изучите все ключевые основы Go - одного из самых востребованных и популярных языков программирования, который вы можете выучить в наши дни! Go (или Golang) - это очень современный, производительный и популярный язык программирования, который вы можете использовать для создания приложений, скриптов, автоматизации, веб-серверов, API-интерфейсов и многого другого!