Внедрить сервер RESTful API
RESTful — самая популярная форма архитектуры программного обеспечения в Интернете. Благодаря четкой структуре, соответствию стандартам, простоте понимания и расширения, он используется все большим количеством веб-сайтов.
Что такое ОТДЫХ
REST (Representational State Transfer), впервые появившийся в докторской диссертации Роя Томаса Филдинга в 2000 году, относится к набору архитектурных ограничений и принципов. Приложение или дизайн, который удовлетворяет этим ограничениям и принципам, является RESTful.
- Ресурсы (Resources), REST — это «преобразование состояния уровня представления», по сути, опускает тему. «Уровень представления» фактически относится к «слою представления» «ресурса». Так что же такое ресурсы? Изображения, тексты, документы, мультимедиа и т. д., к которым мы обычно обращаемся в Интернете, являются ресурсами, которые обычно находятся через URI. То есть URI представляет ресурс.
- Слой представления (Representation), ресурс представляет собой конкретную информацию об объекте, он может быть представлен различными способами. Представление объекта — это уровень представления. Например текстовое сообщение txt, его можно вывести в html, json и т.д.
- State Transfer, посещение веб-сайта, представляет собой интерактивный процесс между клиентом и сервером. В этом процессе участвуют данные и изменения состояния. Протокол HTTP не имеет состояния, поэтому эти состояния должны сохраняться на стороне сервера, поэтому, если клиент хочет уведомить серверную сторону об изменениях данных и состояния, он должен каким-то образом уведомить ее. Средством, с помощью которого клиент может уведомить сервер, может быть только протокол HTTP. В частности, в протоколе HTTP есть четыре глагола, которые выражают режим работы: GET, POST, PUT, DELETE. Они соответствуют четырем основным операциям: GET используется для получения ресурсов, POST Он используется для создания новых ресурсов (а также может использоваться для обновления ресурсов), PUT используется для обновления ресурсов, а DELETE используется для удаления ресурсов.
Подводя итог, давайте резюмируем, что такое архитектура RESTful:
1, каждый представляет URI ресурса
2. Между клиентом и сервером, какой-то слой презентации для передачи этого ресурса
3. Клиент управляет ресурсами на стороне сервера с помощью четырех HTTP-команд для достижения «преобразования состояния уровня представления».
Суммируя их в виде рисунка, схема архитектуры REST выглядит так:
Расширяемость REST:
Что такое RPC
RPC (протокол удаленного вызова процедур) — это протокол для запроса услуг от удаленной компьютерной программы через сеть без знания базовой сетевой технологии. Он предполагает существование некоторого транспортного протокола, такого как TCP или UDP, для передачи информационных данных между взаимодействующими программами. Это позволяет сетевому шаблону вызова функции. В модели сетевой связи OSI RPC охватывает транспортный уровень и прикладной уровень. RPC упрощает разработку приложений, включая сетевое распределенное мультипрограммирование.
Принцип работы
Во время выполнения вызов RPC от клиента к серверу, его внутренняя работа примерно состоит из следующих шагов:
1. Вызвать дескриптор клиента, выполнить передачу параметров
2. Вызвать ядро локальной системы для отправки сетевых сообщений.
3. Сообщение отправляется на сервер
4. Дескриптор сервера получает сообщение и получает параметры
5. Выполнение удаленных процедур
6. Выполненный процесс возвращает результат дескриптору сервера
7. Дескриптор сервера возвращает результат и вызывает ядро удаленной системы.
8. Сообщение отправляется обратно на локальный хост
9. Дескриптор клиента получает сообщения от ядра
10. Клиент получает данные, возвращенные дескриптором
REST vs RPC
При разработке сервера API многие сталкиваются с таким вопросом — выбирайте REST или RPC. У RPC есть три основных преимущества перед REST:
1. RPC+Protobuf использует TCP в качестве протокола передачи, а REST напрямую использует HTTP в качестве протокола прикладного уровня.Эта разница приводит к тому, что REST имеет более низкую производительность вызовов, чем RPC+Protobuf.
2. RPC не похож на REST.Каждая операция должна быть абстрагирована на добавление, удаление, изменение и проверку ресурсов.В реальной разработке есть много операций, которые трудно абстрагировать на ресурсы, например операции входа. Поэтому в реальной разработке API нельзя писать строго в соответствии со спецификацией REST, и у RPC этой проблемы нет.
3, детали сети защиты RPC, простота использования и аналогичные локальные вызовы.
Но REST также имеет много преимуществ перед RPC:
1. Легкий, простой в использовании, ремонтопригодность и масштабируемость хороши
2. REST относительно более стандартизирован, более стандартен и более универсален. Независимо от того, какой язык поддерживает протокол HTTP, он может подключаться ко многим внешним системам. Пока он отвечает вызовам HTTP, он больше подходит для внешнего использования. имеют языковые ограничения, а вызовы RPC на разных языках.
3. Формат JSON более читабелен, и его очень удобно разрабатывать и отлаживать
4. В процессе разработки, если API написано строго в соответствии со спецификацией REST, API выглядит понятнее и понятнее для всех.
На самом деле общепринятой практикой в отрасли является использование RPC для вызовов между внутренними системами и REST для внешнего использования, поскольку вызовы между внутренними системами могут быть частыми, что требует высокопроизводительной поддержки RPC. Внешнее использование REST проще для понимания и носит более общий характер.
базовый веб-сервер
Служба RESTful — это прежде всего веб-служба. Вот простой веб-сервер, который просто возвращает ссылку на любой запрос:
package main
import (
"fmt"
"html"
"log"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))
})
log.Fatal(http.ListenAndServe(":8080", nil))
}
После компиляции и запуска используйте curl для проверки, результаты следующие:
$ curl -v -XGET -H "Content-Type: application/json" http://127.0.0.1:8080/user
Hello, "/user"
Функция маршрутизации
Очевидно, что наш онлайн-проект не может использовать такой простой API-сервер. Когда количество пользователей увеличится, запросы будут продолжать расти, как с ними работать? Автор использует инфраструктуру маршрутизации с открытым исходным кодом.mux. Это небольшой, эффективный и широко используемый сторонний фреймворк. На следующих страницах автор будет использовать мультиплексор для создания инфраструктуры сервера API.
Установка мультиплексора
$go get github.com/gorilla/mux
Router
//Router.go
import (
"net/http"
"github.com/gorilla/mux"
)
type Route struct {
Name string
Method string
Pattern string
HandlerFunc http.HandlerFunc
}
type Routes []Route
func NewRouter() *mux.Router {
router := mux.NewRouter().StrictSlash(true)
for _, route := range routes {
var handler http.Handler
handler = route.HandlerFunc
handler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
handler.ServeHTTP(w, r)
})
router.Methods(route.Method).Path(route.Pattern).Name(route.Name).Handler(handler)
}
return router
}
var routes = Routes{
Route{
"DeleteItem",
"DELETE",
"/v1/delete",
v1_deleteItem,
},
...
}
Handler
//Handler.go
func v1_deleteItem(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.WriteHeader(http.StatusOK)
if err := json.NewEncoder(w).Encode(jsonErr{Code: http.StatusOK, Text: "操作成功"}); err != nil {
log.print("%s\n%s", err.Error(), debug.Stack())
}
}
Общая реализация функции мультиплексирования:
//main.go
func main() {
router := NewRouter()
log.print("service running(PID:%d)...", os.Getpid())
log.Fatal(http.ListenAndServe(":8080", router))
}
Базовая структура API реализована, и следующим шагом является подключение соответствующего модуля реализации функции с соответствующим интерфейсом.
напиши в конце
Если вы хотите узнать, как самостоятельно завершить онлайн-ПРИЛОЖЕНИЕ с функцией сервера API в качестве разработчика клиента, вы можете обратиться к столбцу"Как самостоятельно разработать полноценное приложение"Используя онлайн приложение в столбцахРемеслоНа всякий случай подробно рассказываю, как автор реализует все функции АРР.