《Web Development with Go》实现一个简单的rest api
设计模式完了之后,应该实现具体的应用了。
设计模式还得没事就要复习。
web应用,学习的是网上的一本书。
《Web Development with Go》
package main import ( "encoding/json" "log" "net/http" "strconv" "time" "github.com/gorilla/mux" ) type Note struct { Title string `josn:"title"` Description string `json: "description"` CreatedOn time.Time `json:"createdon"` } var noteStore = make(map[string]Note) var id int = 0 func PostNoteHandler(w http.ResponseWriter, r *http.Request) { var note Note err := json.NewDecoder(r.Body).Decode(¬e) if err != nil { panic(err) } note.CreatedOn = time.Now() id++ k := strconv.Itoa(id) noteStore[k] = note j, err := json.Marshal(note) if err != nil { panic(err) } w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusCreated) w.Write(j) } func GetNoteHandler(w http.ResponseWriter, r *http.Request) { var notes []Note for _, v := range noteStore { notes = append(notes, v) } w.Header().Set("Content-Type", "application/json") j, err := json.Marshal(notes) if err != nil { panic(err) } w.WriteHeader(http.StatusOK) w.Write(j) } func PutNoteHandler(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) k := vars["id"] var noteToUpd Note err = json.NewDecoder(r.Body).Decode(¬eToUpd) if err != nil { panic(err) } if note, ok := noteStore[k]; ok { noteToUpd.CreatedOn = note.CreatedOn delete(noteStore, k) noteStore[k] = noteToUpd } else { log.Printf("Could not find key to update.") } w.WriteHeader(http.StatusNoContent) } func DeleteNoteHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) k := vars["id"] if _, ok := noteStore[k]; ok { delete(noteStore, k) } else { log.Printf("Could not find key to delete.") } w.WriteHeader(http.StatusNoContent) } func main() { r := mux.NewRouter().StrictSlash(false) r.HandleFunc("/api/notes", GetNoteHandler).Methods("GET") r.HandleFunc("/api/notes", PostNoteHandler).Methods("POST") r.HandleFunc("/api/notes/{id}", PutNoteHandler).Methods("PUT") r.HandleFunc("/api/notes/{id}", DeleteNoteHandler).Methods("DELETE") server := &http.Server{ Addr: ":8080", Handler: r, } log.Println("Listening...") server.ListenAndServe() }
=========================================================================
《Web Development with Go》实现一个简单的rest api的更多相关文章
- JAVA WEB快速入门之通过一个简单的Spring项目了解Spring的核心(AOP、IOC)
接上篇<JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构.调试.部署>,通过一个简单的JSP WEB网站了解了JAVA WEB相关的知识,比如:Ser ...
- 基础项目构建,引入web模块,完成一个简单的RESTful API 转载来自翟永超
简介 在您第一次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复粘贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot ...
- laravel 实现一个简单的 RESTful API
创建一个 Article 资源 php artisan make:resource Article 你可以在 app/Http/Resources 目录下看到你刚刚生成的 Article 资源 当然我 ...
- 我的第一个python web开发框架(2)——一个简单的小外包
第一部分说明 第一部分大概有20来章,主要讲的是一些开发常识.开发前中后期准备内容.开发环境与服务器部署环境安装设置.python基础框架结构与功能等内容,代码会比较简单. 本系列会以故事的方式,向大 ...
- net core体系-web应用程序-1VS2017构建一个简单的web
使用vs2017,添加一个新项目-asp.net core web应用程序. 结构如图, wwwroot放了网站的静态资源如css.js.image文件: appsetting.json是应用程序的配 ...
- [原创]java WEB学习笔记12:一个简单的serlet连接数据库实验
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 一、基础项目构建,引入web模块,完成一个简单的RESTful API
一.Spring Boot的主要优点: 为所有Spring开发者更快的入门 开箱即用,提供各种默认配置来简化项目配置 内嵌式容器简化Web项目 没有冗余代码生成和XML配置的要求 二.使用maven构 ...
- [development][tcp/ip][ids] 一个简单有参考价值的库 libnids
libhtp 中的例子, 可以通过libnids快速使用. 或者可以快速的写个sniffer. 支持三个功能 ip分片重组, tcp乱序重排, 端口扫描发现. 工程: https://github.c ...
- Java框架spring Boot学习笔记(九):一个简单的RESTful API
RESTful API设计需求如下: User.java package com.springboot.test; public class User { private Long id; priva ...
随机推荐
- C# 面向切面编程 AOP
AOP(Aspect Oriented Programming) 面向切面编程 起源 引言 http://wayfarer.cnblogs.com/articles/241012.html AOP技 ...
- java 编译时注解框架 lombok-ex
lombok-ex lombok-ex 是一款类似于 lombok 的编译时注解框架. 编译时注,拥有运行时注解的便利性,和无任何损失的性能. 主要补充一些 lombok 没有实现,且自己会用到的常见 ...
- 极客时间-vue开发实战学习(ant-design vue作者)
vue基础 属性 事件 插槽 指令(Directives) 生命周期 底层原理 vue生态 路由管理器vue Router 状态管理器vuex 同构Nuxt vue实战 实战项目-ant-desing ...
- 搭建Vue开发环境
1.安装Node.js 安装包下载地址: https://nodejs.org/en/ 安装时可以选择是否自动安装必要的工具,如Chocolatey.Python2,这里我选择了自动安装 Node.j ...
- Fiddler常用设置
1.设置抓取HTTPS请求 勾选后弹窗添加证书确认框 点击yes后,弹出警告 点击是,成功添加证书 点击OK确认,设置成功了 成功抓取到HTTPS请求 2.自定义会话框,展示GET和POST请求 3. ...
- C# Distinct去重泛型List
List<int>去重 List<string>去重 List<T>去重 1. List<int>去重 List<int> ilist = ...
- Python如何动态的为对象添加方法或属性,__slots__用法
代码示例如下: import types #使用MethodType方法需要导入包 class test(object): #定义 一个test类,包含name属性和f()方法 def __i ...
- 09-Node.js学习笔记-异步编程
同步API,异步API 同步API:只有当前API执行完成后,才能继续执行下一个API console.log('before'); console.log('after'); 异步API:当前API ...
- 花了三个月终于把所有的 Python 库全部整理了!可以说很全面了
库名称简介 Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主要用于在终端或浏览器端构建格式 ...
- android屏幕监视工具 android screen monitor使用
android screen monitor是一个非常好用的手机屏幕监视工具,可以将你的手机界面动态的显示出来,可用于项目演示. 这个工具就是其实一个jar文件,不到300KB大小,依赖jdk,并且还 ...