api-project使用帮助文档

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();
    //初始化缓存
	@Override
	public void init() {
		// TODO Auto-generated method stub
		rcache.put("",null);
	}
	//用于周期性刷新缓存
	@Override
	public void refresh() {
        // TODO Auto-generated method stub
		lock.lock();
		try {
			
			rcache.clear();
			rcache.put("ddd", null)
		} finally {
			// TODO: handle finally clause
			lock.unlock();
		}	
	}
   //重写该方法用于判断是否存在
	@Override
	public boolean exist(String... key) throws Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean exist(String hkey, String... key) throws Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean exist(String[] hkeys, String... key) throws Exception {
		// TODO Auto-generated method stub
		
		return false;
	}
   //重写该方法用于判断是否存在某值
	@Override
	public boolean existObject(String obj, String... key) throws Exception {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean existObject(String[] objs, String... key) throws Exception {
		// TODO Auto-generated method stub
		return false;
	}
    //查询某key对应的值
	@Override
	public <T> T get(Class<T> clz, String... key) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <T> T get(Class<T> clz, String hkey, String... key) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public <T> T get(Class<T> clz, int index, String... key) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}
    //删除key对应的缓存
	@Override
	public void delete(String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void delete(String hkey, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void delete(String[] hkeys, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void deleteObject(String obj, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}
    //删除缓存中的某数据
	@Override
	public void deleteObject(String[] objs, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}
   //向缓存中插入数据
	@Override
	public void put(String value, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void put(TimeUnit unit, long expire_in, String value, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void put(Map<String, String> value, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void put(String hkey, String value, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void put(TimeUnit unit, long expire_in, String hkey, String value, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void put(TimeUnit unit, long expire_in, Map<String, String> value, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void put(List<String> value, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void put(TimeUnit unit, long expire_in, List<String> value, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void put(Set<String> value, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void put(TimeUnit unit, long expire_in, Set<String> value, String... key) throws Exception {
		// TODO Auto-generated method stub
		
	}
    //通过正则匹配对应key
	@Override
	public String[] keys(String pattern) throws Exception {
		// TODO Auto-generated method stub
		return 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: # interesting
        print 'Greater'
    return (param2 - param1 + 1) or None
class SomeClass:
    pass
>>> message = '''interpreter
... prompt'''

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

目录

[TOC]来生成目录:

数学公式

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

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

x = b ± b 2 4 a c 2 a x = \dfrac{-b \pm \sqrt{b^2 - 4ac}}{2a}

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

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

或者流程图:

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

离线写博客

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

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

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

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

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

##浏览器兼容

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


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

猜你喜欢

转载自blog.csdn.net/ccycc88/article/details/82381971
今日推荐