이 시리즈에서는 라우팅 및 코드 인터페이스부터 시작하여 Mongo 데이터베이스와 오소리 데이터 계층을 추가한 다음 인증 프로토콜을 추가하여 지속 가능한 확장 아키텍처인 제품 수준 REST API TODO 목록을 구축하는 방법을 살펴보겠습니다. 레이어(OAuth 2.0)
이 시리즈에서는 카이 라우팅을 사용하겠습니다.라우팅을 위해 표준 라이브러리나 Gin 또는 router-x 대신 Chi를 사용하는 이유는 무엇입니까?
글쎄, 사실 무엇을 사용하든 상관없습니다. 라우팅에 무엇을 사용하든 이 시리즈에서 논의된 개념은 유용할 것입니다. 하지만 Chi-router가 대부분의 대안보다 우수하다고 생각하게 만드는 다음과 같은 장점이 있습니다.
net/http
표준 라이브러리와 100% 호환 --- Go 생태계에서 사용 가능 net/http 호환 http 또는 미들웨어 pkg
net/http
标准库 100% 兼容---可以在 Go 生态系统中使用任何与net / http 兼容的 http 或中间件 pkg
专为模块化/可组合 API 设计 - 中间件,内联中间件,路由组和子路由器安装
没有外部依赖---纯粹的就是 Go 1.7+ stdlib + net / http
强悍 --- 有很多公司正在使用,比如:Pressly,CloudFlare,Heroku,99Designs
轻量级 --- cloc'd in ~1000 LOC for the chi router
速度很快
我最喜欢的是,你为其他 net / http 兼容路由器编写的旧的 http 处理程序和中间件也可以在正常运行。
首先,我们创建一个 main.go 。我们程序的基础(或者说中心元件 ?)
r.Mount("/api/todo", todo.Routes())
router.Route("/v1", ....)
笔者(基于 Ajinkya 在评论中提到的问题,我会更多的阐述 walk 方法):
chi 路由有一个方法叫做 walk。这个方法接收的参数:
A router
A callback.
每个被定义的路由都会被回调,并且接收 4 个参数:
路由定义的方法
实际路由的字符串
处理器(函数),处理给定路由的请求
给定路由中,定义过的中间件列表(中间件是一个比较简单的函数,它会在处理器被调用前调用,所以它们才会被使用在请求处理之前,授权等)
以我为例,我将简单地轮询路由并且打印所有被定义的路由。从而让我对所有可用的路由一目了然。
todo 包有一个返回所有路由的方法。这些路由都是写在 main.go 文件中。 实际上我通常会把这些路由写在一个叫 routes.go 的文件中, 这样会很容易在包里找到.
处理程序具有 func (w http.ResponseWriter,r *http.Request)
func(w http . ResponseWriter,r *http.Request)
함수 서명입니다. 이는 이 핸들러가 표준 라이브러리를 사용하는 net/http 작성 방법과 다르지 않음을 의미합니다. 🎜🎜🎜🎜JSON 응답의 모든 HTML을 자동으로 이스케이프 처리하고 콘텐츠 유형을 application/json으로 설정하는 인코딩/json 래퍼인 render.JSON을 사용하세요.🎜🎜🎜🎜이 방법이 얼마나 간단한지 보면 놀라실 것입니다. 이 프로젝트는 GitHub https://github.com/tonyalaribe/todoapi/tre에서 볼 수 있습니다....🎜이 시리즈의 다음 기사에서는 구성 및 공유 상태에 대한 지원을 계속할 것입니다. 대부분의 프로젝트에는 일반적으로 데이터베이스 연결 등과 같은 추가 구성이 필요합니다. 다음 기사에서 이에 대해 논의하겠습니다.
추천 튜토리얼: "Go Tutorial"
위 내용은 Golang REST API 아키텍처의 우아한 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!