IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 【低代码】像Postman一样工作,轻量级API组件实现 -> 正文阅读

[开发测试]【低代码】像Postman一样工作,轻量级API组件实现

首先明确要解决什么问题,通常的低代码平台基本功能都很强大了,但是程序一定会有其业务的特殊性,光靠平台不一定能解决所有问题,这就需要我们去拓展平台的扩展能力,能够使用一些第三方工具或者通用http api这样的形式来扩展平台自身能力。api组件就是为了让用户能使用通用的http接口,扩展平台的通用能力。

在低代码产品中,很多产品往往支持用户去调用接口来实现自己的业务逻辑,这时往往需要一个功能去支持用户调用第三方api,如何实现这个一个组件以及怎样实现这样一个功能就成为了一个不可绕过的问题。当然,这样的产品也挺多的,像测试用到的postman就是一个很好的软件,是个非常nice的参考案例。



## api组件 ### 什么是api api全称是application interface,广义上程序暴漏的接口都是api,而现在我们主要使用的是http形式的接口,像postman这样的工具支持的也是http协议,现在主流的接口形式也是以http的形式存在的,当然我们需要知道的是还有http协议之外的其他形式接口,但我们主要使用的还是http协议。

http协议

要开发这样一个组件首先需要了解http协议的基本格式,http协议报文非常简单,需要知道http协议主要有三个组成要素。

  • 请求方式 资源地址 协议版本
  • 协议头
  • 协议体
    http协议报文

api组件实现

API组件实现流程

实现代码

全部代码放在个人git上,欢迎star或者有好的建议请联系笔者。
https://github.com/haobinliu/light_api.git
个人GitHub: 源码地址.

  • 数据结构定义
package com.lbh.lightapi.model;

import java.util.Map;

/**
 * Copyright(c)lbhbinhao@163.com
 * @author liubinhao
 * @date 2022/2/19
 * ++++ ______                           ______             ______
 * +++/     /|                         /     /|           /     /|
 * +/_____/  |                       /_____/  |         /_____/  |
 * |     |   |                      |     |   |        |     |   |
 * |     |   |                      |     |   |________|     |   |
 * |     |   |                      |     |  /         |     |   |
 * |     |   |                      |     |/___________|     |   |
 * |     |   |___________________   |     |____________|     |   |
 * |     |  /                  / |  |     |   |        |     |   |
 * |     |/ _________________/  /   |     |  /         |     |  /
 * |_________________________|/b    |_____|/           |_____|/
 */

public class Api {

    private String method;

    private String uri;

    private Map<String,String> headers;

    private String body;

    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }

    public String getUri() {
        return uri;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }

    public Map<String, String> getHeaders() {
        return headers;
    }

    public void setHeaders(Map<String, String> headers) {
        this.headers = headers;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }
}
  • controller接口定义
package com.lbh.lightapi.controller;

import com.lbh.lightapi.model.Api;
import com.lbh.lightapi.service.ApiService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

@RestController
@RequestMapping("/api")
public class ApiController {

    @Resource
    private ApiService apiService;

    @PostMapping("/invoke")
    public String apiInvoke(@RequestBody Api api){
        return apiService.apiInvoke(api);
    }

    @GetMapping
    public String test(){
        return "hello world!";
    }
}
  • 业务实现(调用器调用API)
package com.lbh.lightapi.service.impl;

import com.lbh.lightapi.model.Api;
import com.lbh.lightapi.service.ApiService;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;
import java.util.Map;

/**
 * Copyright(c)lbhbinhao@163.com
 * @author liubinhao
 * @date 2022/2/19
 * ++++ ______                           ______             ______
 * +++/     /|                         /     /|           /     /|
 * +/_____/  |                       /_____/  |         /_____/  |
 * |     |   |                      |     |   |        |     |   |
 * |     |   |                      |     |   |________|     |   |
 * |     |   |                      |     |  /         |     |   |
 * |     |   |                      |     |/___________|     |   |
 * |     |   |___________________   |     |____________|     |   |
 * |     |  /                  / |  |     |   |        |     |   |
 * |     |/ _________________/  /   |     |  /         |     |  /
 * |_________________________|/b    |_____|/           |_____|/
 */
@Service
public class ApiServiceImpl implements ApiService {

    @Resource
    private RestTemplate restTemplate;

    @Override
    public String apiInvoke(Api api) {
        HttpMethod method = HttpMethod.resolve(api.getMethod().toUpperCase());
        if (method == null){
            throw new RuntimeException("No such request method!");
        }
        String uri = api.getUri();
        String body = api.getBody();
        Map<String, String> headers = api.getHeaders();
        return restTemplate.exchange(uri, method, transHttpHeaders(body, headers), String.class)
                .getBody();
    }

    private <T> HttpEntity<T> transHttpHeaders(T body, Map<String,String> headers){
        HttpHeaders httpHeaders = new HttpHeaders();
        headers.forEach(httpHeaders::add);
        return new HttpEntity<>(body, httpHeaders);
    }
}

测试

测试结果
这样就实现了一个很简单的API组件,但是一个完整可用的模块,这样一个API组件还缺少了个人用户API的存储修改等相关功能,像Postman还可以像文件夹保存文件那样保存API,将这样一个模块完善还有很多可以做的功能,若读者有什么好的建议也可以联系笔者。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:54:14  更:2022-02-22 20:55:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 2:32:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码