GO语言03(Restful API,API流程以及代码结构)
目录
Restful API
1. 什么是 API
2. REST 简介
3.RESTful RUI的设计
4. RPC 简介
API 流程
1. HTTP API 服务器启动流程
2. HTTP 请求处理流程
3. HTTP 请求和响应格式介绍
项目目录结构
Restful API
1. 什么是 API
2. REST 简介
HTTP方法 | 行为 | URl | 示例说明 |
---|---|---|---|
GET | 获取资源列表 |
/users
|
获取账号列表 |
GET | 获取一个具体的资源 |
/users/admin
|
获取admin账号的详细信息 |
POST | 创建一个新的资源 |
/users
|
创建一个新账号 |
PUT | 以整体的方式更新一个资源 |
/users/1
|
更新id为1的账号 |
DELETE | 删除服务器上的一个资源 |
/users/1
|
删除id为1的账号 |
3.RESTful RUI的设计
应该尽量将API部署在专用域名之下。
https://api.example.com
如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。
https://example.org/api/
方法一:应该将API的版本号放入URL。
http://www.example.com/app/1.0/foo
http://www.example.com/app/1.1/foo
http://www.example.com/app/2.0/foo方法二:将版本号放在HTTP头信息中,但不如放入URL方便和直观。Github采用这种做法。
因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URL。版本号可以在HTTP请求头信息的Accept字段中进行区分(参见Versioning REST Services):
Accept: vnd.example-com.foo+json; version=1.0
Accept: vnd.example-com.foo+json; version=1.1
Accept: vnd.example-com.foo+json; version=2.0
名词vs动词
资源作为网址,只能有 名词 ,不能有 动词 ,而且所用的名词往往与数据库的表名对应。举例来说:
# 获取所有端口
/getProducts
# 获取所有订单
/listOrders
# 订单1的所有回复(排序返回)
/retreiveClientByOrder?orderId=1对于一个简洁结构,你应该始终用名词。 此外,利用的HTTP方法可以分离网址中的资源名称的操作。
# 获取所有产品清单
GET /products
# 新建产品
POST /products
# 获取产品4的信息
GET /products/4
# 更新产品4的信息
PATCH(或)PUT /products/4
# 获取单个产品
http://127.0.0.1:8080/AppName/rest/products/1
# 获取所有产品
http://127.0.0.1:8080/AppName/rest/products
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
DELETE(DELETE):从服务器删除资源。还有三个不常用的HTTP动词
PATCH(UPDATE):在服务器更新(更新)资源(客户端提供改变的属性)。
HEAD:获取资源的元数据。
OPTIONS:获取信息,关于资源的哪些属性是客户端可以改变的。
?limit=10:指定返回记录的数量
?offset=10:指定返回记录的开始位置。
?page=2&per_page=100:指定第几页,以及每页的记录数。
?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
?animal_type_id=1:指定筛选条件
参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如,GET /zoos/ID/animals 与 GET /animals? zoo_id=ID 的含义是相同的。
200 OK - [GET]:服务器成功返回用户请求的数据
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作
401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
定制标准化的返回结果
{ "code": 10002, "message": "Error occurred while binding the request body to the struct." "data":{}
}
如果请求出错服务器就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键
值即可。
{ "code": 10002, "error": "Error occurred while binding the request body to the struct." }
4. RPC 简介
API 流程
1. HTTP API 服务器启动流程
1. 在启动一个 API 命令后,API 命令会首先加载配置文件,根据配置做后面的处理工作。 2. 通常会将日志相关的配置记录在配置文件中,在解析完配置文件后,就可以加载日志包初始化函数,来初始化 日志实例,供后面的程序调用。 3. 接下来,初始化数据库实例,建立数据库连接,供后面对数据库的 CRUD 操作使用。 4. 在建立完数据库连接后,需要设置 HTTP,通常包括 3 方面的设置: 设置 Header 注册路由 注册中间件 5. 之后会调用 net/http 包的 ListenAndServe() 方法启动 HTTP 服务器。 6. 在启动 HTTP 端口之前,程序会 go 一个协程,来ping HTTP 服务器的 /sd/health 接口,如果程序成功启动,ping 协程在timeout 之前会成功返回,如果程序启动失败,则 ping协程最timeout,并终止整个程序
2. HTTP 请求处理流程
1. 建立连接
客户端发送 HTTP 请求后,服务器会根据域名进行域名解析,就是将网站名称转变成 IP 地址:localhost -> 127.0.0.1,Linux hosts文件、DNS 域名解析等可以实现这种功能。之后通过发起 TCP 的三次握手建立连接。TCP 三 次连接请参考 TCP 三次握手详解及释放连接过程,建立连接之后就可以发送 HTTP 请求了。
2. 接收请求
3. 处理请求
4. 记录事务处理过程
3. HTTP 请求和响应格式介绍
请求头的组成
项目目录结构
GO语言03(Restful API,API流程以及代码结构)相关推荐
- 【Go API 开发实战 3】API 流程和代码结构
API 流程和代码结构 为了使读者在开始实战之前对 API 开发有个整体的了解,这里选择了两个流程来介绍: HTTP API 服务器启动流程 HTTP 请求处理流程 本小节也提前给出了程序代码结构图, ...
- MATLAB仿真作图的流程与代码结构-经验总结
文章目录 流程简述 代码结构 1.第一部分:加载数据 2.第二部分:仿真计算 3.第三部分:绘图 命名规则 流程简述 在长期编写matlab代码中总结出得经验:通过一个合理的流程来写MATLAB代码, ...
- 非顺序控制结构的c语言语法是怎样的,流程控制语句:顺序结构和选择结构
流程控制语句 概述:控制程序的执行流程 分类: 顺序结构 选择结构 循环结构 顺序结构语句 顺序结构语句:从上往下,依次执行 选择结构 if语句: switch语句: if语句: 格式1: 格式2: ...
- API流程和代码结构
一.HTTP API 服务器启动流程 1. 在启动一个 API 命令后,API 命令会首先加载配置文件,根据配置做后面的处理工作. 2. 通常会将日志相关的配置记录在配置文件中,在解析完配置文件后,就 ...
- SpringBoot RESTful 风格 API 多语言国际化i18n解决方案
文章目录 1 摘要 2 核心代码 2.1 多语言枚举类 2.2 多语言处理工具类 2.3 多语言的API返回状态码枚举类 2.4 多语言 API 接口返回结果封装 2.5 i18n 国际化多语言配置文 ...
- 学习笔记-Spring Boot 开发 RESTful Web API(一)
题记: 本篇是Spring Boot 开发学习系列中基础知识学习的一部分,为 RESTful Web API 相关基础知识,为实践操作奠定理论基础. REST不是一个标准,而是一种软件应用架构风格.基 ...
- 我所理解的RESTful Web API [设计篇]
<我所理解的RESTful Web API [Web标准篇]>Web服务已经成为了异质系统之间的互联与集成的主要手段,在过去一段不短的时间里,Web服务几乎清一水地采用SOAP来构建.构建 ...
- django restful 请求_利用 Django REST framework 构建 RESTful Web API
利用 Django REST framework 构建 RESTful Web API 终于到了动手操作的环节啦,这一节,我们以师生管理系统为例,带领大家搭建一套 framework Web API. ...
- 对RESTful Web API的理解与设计思路
距离上一篇关于Web API的文章(如何实现RESTful Web API的身份验证)有好些时间了,在那篇文章中提到的方法是非常简单而有效的,我在实际的项目中就这么用了,代码经过一段时间的磨合,已经很 ...
最新文章
- 14.关于原子性的相关介绍
- dubbo相关的知识点总结
- python中的os abort_Python os.abort()用法及代码示例
- java jtable行标题_如何设置JTable的标题——如图
- 华为手机助手解析包时出现问题_iOS12.0-12.1.2设备降级/平刷iOS12.0-12.1.2教程(付问题解决)...
- 日常生活小技巧 -- UltraEdit复制16进制数据
- push failed in WebIDE
- debian执行php网页,如何在Debian上安装和使用PHP Composer
- 那些有趣的电子漫画合集
- B树、B+树到底是什么?
- CraftAR入门教程
- 暗黑破坏神java魔法护身,发个实用的贴!!暗黑+1+2技能护身符合成,望大家顶下,能加精...
- 【超参数寻优】粒子群算法(PSO) 超参数寻优的python实现
- iphone-common-codes-ccteam源代码 CCCommon.h
- 原子操作--sync/atomic的用法
- 关关采集V3.5高级版杰奇全版本通用编码版
- 超简洁又强大的幻灯片JS、CSS代码,兼容性强
- 几何分布(一种离散分布)
- chm文件打不开,已取消到该网页的导航
- MTF 曲线图应该怎么看?
热门文章
- 贴片轻触开关路线难题
- 彻底禁用Chrome的“请停用以开发者模式运行的扩展程序”弹窗
- 世界公认最健康的作息时间表,今后就照这个来~
- [源码和文档分享]C++实现的基于NSM的简易数据库
- 网络安全工具 Godzilla 哥斯拉内存马使用
- 【2021年我在CSDN干了啥 -- 一名博客专家的自述】
- EWT/经验小波变换/EWT安装包下载
- 《WinDbg 命令三部曲:(三)WinDbg SOSEX 扩展命令手册》
- M1 docker 安装mysql5.7
- 【观察】重塑全国产化应用交付格局,神州数码自主创新更上层楼