开放平台SDK设计思路

大家好,我是霸戈!上次写完 “淘宝” 开放平台接口设计思路后,有不少粉丝就提到什么时候会出下一篇,所以今天打算写一篇开放平台SDK设计的一些思路,同时我也会做一些实践,一步步把我的设计思路进行落地。

在写这篇文章之前,我个人因为工作的原因使用过淘宝、京东开放平台的一些SDk,也学到不少设计思路,这次准备将我的思路落地成可以使用的SDK,大概的设计会分为三个模块,分别为:

  • 数据传输模块:主要用于传输请求数据,本文使用http协议传输数据
  • 序列化模块:用户序列化和反序列化数据,SDK是给客户使用应该尽可能的去适配客户的意愿,如客户首先的序列化方式为JSON那,作为使用方肯定是会希望SDK能支持JSON序列化和反序列化的
  • 应用模块:主要是协调数据传输、序列化之间的工作,同时对数据做一些校验签名操作

开放平台SDK设计思路_第1张图片

数据传输

数据传输协议使用较为通用的http协议,一开始是想是否做一个通用的设计来支持其他的传输方式,如支持socket保持长链接,后来想想没必要过度设计,如果要做到支持不同的传输协议,那么就得做很大一部分适配的编码,实事上可能支持http后以后都会保持不变,没有这个必要!

目前有很多开源的http工具,如httpclientokhttp还有URLConnection的方式等,选择哪一种呢? 好的方法是自己抽象出来一个接口,然后提供一个默认的实现类就好,这样就能保持一定的灵活性。

/**
 * http协议接口
 */
public interface HttpClient {

    /**
     * 执行http post请求
     * @param url
     * @param data
     * @param headers
     * @return
     */
    String post(String url, byte[] data, Map> headers)  throws HttpClientException;
  
}

HttpClient只定义了一个post方法,满足需求即可(偷懒需求~),大部分开放平台的接口都是post请求方式的,没必要把所有的http特性都给定义出来,一个post就是干!

接下来就用HttpURLConnection发起http请求吧:

package com.javaobj.sdk.http.impl;

public class DefaultHttpClient implements HttpClient {


    public String post(String url, byte[] data, Map> headers) throws HttpClientException {

        URL targetUrl = null;
        try {
            targetUrl = new URL(url);
        } catch (MalformedURLException e) {
            throw new HttpClientException("访问的url链接不正确");
        }
        try {
            HttpURLConnection  connection = (HttpURLConnection) targetUrl.openConnection();
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setRequestMethod("POST");

            //设置讲求头
            if(headers != null){
                Map> tmp = new HashMap>(headers);
                for(Map.Entry> entry : tmp.entrySet()){
                    for(String value: entry.getValue()){
                        connection.setRequestProperty(entry.getKey(), value);
                    }
                }
       

你可能感兴趣的:(后端开发,Java,架构,http,restful,java)