api-project常用公共业务开发API文档

个人日常api-project使用样例

  • api引入
  • 接口签名
  • 缓存工厂和它的老朋友自动更新
  • LaTex数学公式
  • UML序列图和流程图
  • 离线写博客
  • 导入导出Markdown文件
  • 丰富的快捷键

api引入(Meavn)

meavn仓库地址
<repositories><repository><id>api-project-mvn-rep</id><url>https://raw.github.com/ccycc88/mvn-repo/master/</url><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository></repositories>meavn依赖<dependency><groupId>com.api</groupId><artifactId>api-project</artifactId><version>0.0.1-SNAPSHOT</version></dependency>

接口签名

接口签名主要用于服务对外提供接口的一种安全认证。服务端为需要接口访问应用提供唯一的appId与appId对应的keyt。
应用请求服务端接口需要依据约定算法协议生成对应的签名串。服务端接收到请求参数,依据appId及对应的keyt和参与签名的参数进行认定。

签名算法

  • 签名参数去除空值参数
  • 依据参数名递减排序
  • 将参数_name参数_val&参数_name参数_val进行连接
  • 连接的字符串&keyt
  • 最终字符串通过MD5生成最终签名值

创建签名串

        Map<String, String> m = Maps.newHashMap();m.put("34567", "345");m.put("fh", "2345");m.put("kl", "457");String keyt = "keyt23";String sign = ApiSignUtil.buildSign(m, keyt);
生成签名串
appId与keyt为一一对应,其他参数是一些任意参数,根据业务需求。

验证签名串

        Map<String, String> m = Maps.newHashMap();m.put("34567", "345");m.put("fh", "2345");m.put("kl", "457");m.put("sign", "3529D3639A445BBC9A7EFCC30543F5F5");String keyt = "keyt23";boolean succ = ApiSignUtil.validateSign(m,keyt);
生成签名串
通过appId获取keyt,依据请求参数和keyt进行验证请求是否合法。

缓存工厂和它的老朋友自动更新

为了应用执行效率,及缓存不可缺少的业务场景。缓存工厂通用管理缓存工具,使代码整洁易懂。在缓存的实现中你可以使用redis,memorycache或集合等待。
当然缺少不了他的老朋友自动更新。

缓存实现


import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;import com.google.common.collect.Maps;public class RuleCache extends Cache{private static final String CACHE_PREFIX = "rule";//保存的缓存private Map<String, Map<String, String[]>> rcache = Maps.newHashMap();private ReentrantLock lock = new ReentrantLock();//初始化缓存@Overridepublic void init() {// TODO Auto-generated method stubrcache.put("",null);}//用于周期性刷新缓存@Overridepublic void refresh() {// TODO Auto-generated method stublock.lock();try {rcache.clear();rcache.put("ddd", null)} finally {// TODO: handle finally clauselock.unlock();}   }//重写该方法用于判断是否存在@Overridepublic boolean exist(String... key) throws Exception {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean exist(String hkey, String... key) throws Exception {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean exist(String[] hkeys, String... key) throws Exception {// TODO Auto-generated method stubreturn false;}//重写该方法用于判断是否存在某值@Overridepublic boolean existObject(String obj, String... key) throws Exception {// TODO Auto-generated method stubreturn false;}@Overridepublic boolean existObject(String[] objs, String... key) throws Exception {// TODO Auto-generated method stubreturn false;}//查询某key对应的值@Overridepublic <T> T get(Class<T> clz, String... key) throws Exception {// TODO Auto-generated method stubreturn null;}@Overridepublic <T> T get(Class<T> clz, String hkey, String... key) throws Exception {// TODO Auto-generated method stubreturn null;}@Overridepublic <T> T get(Class<T> clz, int index, String... key) throws Exception {// TODO Auto-generated method stubreturn null;}//删除key对应的缓存@Overridepublic void delete(String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void delete(String hkey, String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void delete(String[] hkeys, String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void deleteObject(String obj, String... key) throws Exception {// TODO Auto-generated method stub}//删除缓存中的某数据@Overridepublic void deleteObject(String[] objs, String... key) throws Exception {// TODO Auto-generated method stub}//向缓存中插入数据@Overridepublic void put(String value, String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void put(TimeUnit unit, long expire_in, String value, String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void put(Map<String, String> value, String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void put(String hkey, String value, String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void put(TimeUnit unit, long expire_in, String hkey, String value, String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void put(TimeUnit unit, long expire_in, Map<String, String> value, String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void put(List<String> value, String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void put(TimeUnit unit, long expire_in, List<String> value, String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void put(Set<String> value, String... key) throws Exception {// TODO Auto-generated method stub}@Overridepublic void put(TimeUnit unit, long expire_in, Set<String> value, String... key) throws Exception {// TODO Auto-generated method stub}//通过正则匹配对应key@Overridepublic String[] keys(String pattern) throws Exception {// TODO Auto-generated method stubreturn null;}public String buildkey(String... key) {return CACHE_PREFIX.concat(":").concat(key[0]);}}

缓存获取

Cache cache = CacheFactory.getInstance(RuleCache.class).getCache();
获取缓存
获取cache实例,便可以对缓存进行增删改查等,屏蔽缓存内部操作是什么redis或集合等

缓存自动刷新

//为缓存设置自动刷新周期(单位秒)
CacheFactory.getInstance(RuleCache.class).setDelay(20l);
//开启缓存自动刷新
AutoUpdater.getInstance().automaticUpdate();
自动刷新
缓存设置他要刷新的周期(单位秒),AutoUpdater到点会调用缓存的refresh()方法对缓存进行更新。AutoUpdater是在应用启动时对应用所有设定周期的缓存都进行任务化。因为automaticUpdate()方法只能被调用一次,如果要动态增加或删除缓存任务使用AutoUpdater中的addUpdateTask(CacheFactory factory),deleteTask(Class<?> clz),这样的业务场景比较少吧!

快捷键

  • 加粗 Ctrl + B
  • 斜体 Ctrl + I
  • 引用 Ctrl + Q
  • 插入链接 Ctrl + L
  • 插入代码 Ctrl + K
  • 插入图片 Ctrl + G
  • 提升标题 Ctrl + H
  • 有序列表 Ctrl + O
  • 无序列表 Ctrl + U
  • 横线 Ctrl + R
  • 撤销 Ctrl + Z
  • 重做 Ctrl + Y

Markdown及扩展

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]

使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。

本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考Github.

表格

Markdown Extra 表格语法:

项目 价格
Computer $1600
Phone $12
Pipe $1

可以使用冒号来定义对齐方式:

项目 价格 数量
Computer 1600 元 5
Phone 12 元 12
Pipe 1 元 234

###定义列表

Markdown Extra 定义列表语法:
项目1
项目2
: 定义 A
: 定义 B

项目3

定义 C

定义 D

定义D内容

代码块

代码块语法遵循标准markdown代码,例如:

@requires_authorization
def somefunc(param1='', param2=0):'''A docstring'''if param1 > param2: # interestingprint 'Greater'return (param2 - param1 + 1) or None
class SomeClass:pass
>>> message = '''interpreter
... prompt'''

###脚注
生成一个脚注1.

目录

[TOC]来生成目录:

文章目录

  • api-project常用公共业务开发API文档
    • api引入(Meavn)
    • 接口签名
      • 签名算法
      • 创建签名串
      • 验证签名串
    • 缓存工厂和它的老朋友自动更新
      • 缓存实现
      • 缓存获取
      • 缓存自动刷新
    • 快捷键
    • Markdown及扩展
      • 表格
      • 代码块
      • 目录
      • 数学公式
      • UML 图:
    • 离线写博客

数学公式

使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.

  • 行内公式,数学公式为:Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n−1)!∀n∈N。
  • 块级公式:

x=−b±b2−4ac2ax = \dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a} x=2a−b±b2−4ac​​

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

张三李四嘿,小四儿, 写博客了没?李四愣了一下,说:忙得吐血,哪有时间写。张三李四

或者流程图:

Created with Raphaël 2.2.0开始我的操作确认?结束yesno
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.

离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.csdn.net/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

**注意:**虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

##浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入


  1. 这里是 脚注内容. ↩︎

api-project使用帮助文档相关推荐

  1. beego API开发以及自动化文档

    2019独角兽企业重金招聘Python工程师标准>>> beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一 ...

  2. Java8 API在线中文阅读文档

    Java8 API在线中文阅读文档 Java8 API chm格式 链接: https://pan.baidu.com/s/1vvxrBtf0we0Y6Q19q0k2Yw 提取码: etnw

  3. JAVA 短信API接口调用 附 文档 Demo

    JAVA 短信API接口调用 附 文档 Demo 1.请求地址 http://host:port/sms 请求方式可以 POST 和 GET方式,建议采用POST方式 2.参数说明 参数需要 URLE ...

  4. 【人工智能 Open AI】通用 API 网关系统(API Gateway)系统设计文档

    怎样设计一个通用 API 网关系统(API Gateway)?给出具体的技术方案,细化到3级目录,不少于3000字.用markdown格式输出. 通用 API 网关系统(API Gateway)系统设 ...

  5. 使用sphinx快速为你python注释生成API(html)文档

    sphinx简介 sphinx是一种基于Python的文档工具,它可以令人轻松的撰写出清晰且优美的文档,由Georg Brandl在BSD许可证下开发.新版的Python3文档就是由sphinx生成的 ...

  6. 【编程规范】 后端API接口设计编写与文档编写参考

    文章目录 0 统一规范 0.1 理清业务流程 0.2 定义前后端开发的接口规范 0.3 定义接口文档 1 后端接口编写 1.0 后端接口介绍 1.0.1 接口交互 1.0.2 返回格式 1.0.3 C ...

  7. TamperMonkey编写脚本常用api中文版(附文档原地址和各种api案例)

    TamperMonkey脚本api文档 用户脚本头部 @name @namespace @version @author @description @homepage, @homepageURL, @ ...

  8. 利用iStylePDF的API实现在PDF文档中动态插入一幅图片

    PDF的交互特性里面有一种叫Annotation的注释和标记对象,我们可以在一个注释对象中放入自己想要的数据.在这篇文章中所讲到的插入一幅图片,是我们在PDF应用中经常需要这样做的,比如个人签名的图片 ...

  9. .net oss存储 oss api接口开发 office文档上传在线预览oss存储 office文档上传oss 阿里云oss接口开发

    word在线预览api接口 office在线预览接口 word转图片 ppt在线预览 excel在线预览 预览支持的文件格式:word(doc,docx),excel(xls,xlsx),ppt(pp ...

  10. notes java api_lotus-notes-使用Java API读取Lotus Notes文档

    Notes Domino中有一个用于对文档进行版本控制的内置功能.根据在数据库设计中配置方式的不同(并假设数据库开发人员没有自己动手制作),这些版本将是对原始父级的响应,或者反过来是新版本成为父级,而 ...

最新文章

  1. 中国安防视频监控行业发展前景分析
  2. Scrum sprint plan中规模估算的常见方式
  3. Python之路----------内置函数
  4. 《LINUX内核设计与实现》第五章学习总结
  5. go语言 mysql卡死_一次mysql死锁的排查过程-Go语言中文社区
  6. 计算机硬件 - 主板
  7. GitHub服务中断24小时11分钟事故分析报告
  8. Code.V光学设计学习(一)——入门介绍
  9. 对话 | AI、机器学习在材料科学研究中能发挥哪些作用?
  10. 微软又犯二了!WebApi中不支持MVC的OutputCache
  11. ARP 地址解析协议 IP地址到MAC地址的转换过程
  12. STM32——TIM1的TIM1_CH1N通道PWM初始化
  13. Github / Gitlab Actions 中的 cron 格式 和设置方法
  14. Android 高仿微信支付键盘
  15. 出现 NameError: name ‘re’ is not defined 的原因
  16. 详解HTML的相对路径写法
  17. pygame简单伪3d赛车赛道
  18. 电脑Win10 企业版如何激活
  19. HDU 1846-Brave Game(巴什博弈-SG函数)
  20. 为什么要多用组合少用继承?

热门文章

  1. 一套完整的云计算工具包含ECS、RDS、SLB、OSS、OCS等
  2. iTOP3A5000_7A2000开发板龙芯全国产处理器LoongArch架构核心主板
  3. 电子工程师标配十款经典RF射频器件
  4. HDU5266 LCA 树链剖分LCA 线段树
  5. 分享8个强大的黑客技术学习网站
  6. 戏剧的一年,记一段劳动仲裁经历
  7. HTML5:canvas基础
  8. 2021年智能优化算法:天鹰优化器AO-附MATLAB代码
  9. Python之Pandas使用知识汇总(持续更新)
  10. 基础爬虫实战案例之获取游戏商品数据