什么是API接口,具体是什么意思?

什么是API接口,具体是什么意思?,第1张

作为软件应用而言,很多资源和数据不一定就是由其自身提供的,某些功能还是需要调用第三方提供的服务,这其中就涉及到API接口的调用。

什么是API接口?

API是指应用程序编程接口,我们通过API接口可以实现特定的功能,而不需要了解其内部实现细节。可以把API接口理解为是特定服务的一种封装,将服务封装起来提供给他人调用,这样一来很多功能不需要从新开发。

举个例子,我们想要知道一周天气如何,如果由自己来实现这个功能很难,因为天气数据只有气象部门才知道。那该如何知道天气信息呢?气象部分提供数据API给我们使用,我们只要输入地区就会知道该地区一周的天气情况,但我们并不需要了解这天气预报是如何实现的。

另外,不同系统和编程语言之间的数据通讯往往也采用API形式进行数据交接。

常见的API形式有哪些?

上面我们说到了,API其实就是一类服务的封装。我们可以使用不同的编程语言编写API,开发习惯和编程语言的不同导致API风格也存在差异。常见的API有以下几种形式:

1、HTTP类型接口

基于HTTP协议提供的API,这类API常常以“网址”形式提供的,像现在主流的RESTful就属于这类接口。

2、RPC接口

RPC它是指远程过程调用,将一部分代码逻辑放在远程服务器上部署,然后在需要的地方调用即可(调用远程方法就像调用本地方法一样),本质上是Client/Server模式,而且支持多种协议和数据传输方式。

3、WebService接口

WebService并不具象地指某种API,我们将以WEB形式提供的服务都称之为WebService,像RESTful也属于WebService。

magic-api 是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口。

1,引入magic-api-spring-boot-starter依赖

orgssssssss

magic-api-spring-boot-starter

171

2,applicationyml 中配置

magic-api:

#配置web页面入口

web: /magic/web

resource:

# location: /data/magic-api

type: database # 配置接口存储方式,这里选择存在数据库中

table-name: magic_api_file # 数据库中的表名

3,启动服务,访问magic-api web页面

http://127001:8035/magic-test/magic/web

1,RequestParam

GET http://localhost:9999/xxx/xxxname=abc&age=49

这样的URL参数magic-api 会自动将name和age映射为同名变量

2,表单参数

POST http://localhost:9999/xxx/xxx

name=abc&age=49

这样的表单参数magic-api 也会自动将name和age映射为同名变量。

3,Request Header参数获取

magic-api 会对所有RequestHeader统一封装为一个名为header的变量 如要获取 token 可以通过headertoken 来获取。

4,POST请求的Request Body参数获取

{

"name": "magic-api"

}

如要获取name属性 则可通过 bodyname 来获取

5,Path参数获取

主要是针对URL定义为http://localhost:9999/user/{id} 的类似接口

如要获取path路径上的id可通过pathid 或 id来获取

6,Cookie,Session参数获取

可以通过cookiexxx,sessionxxx来获取

1,#{} 注入参数,${} 拼接参数

作用和mybatis用法一致

id = #{id};

id=${id};

2,动态SQL参数

通过{condition,expression}来实现动态拼接SQL,如果条件成立则拼接后部分内容SQL中,与mybatis中的if标签基本一致

return dbselect("select from sys_user {id,where id = #{id}}");

相当于mybatis中的

3,Mybatis 语法支持

160以后的版本支持Mybatis语法

操作入口 dbtable('table_name')

1,insert

return dbtable('sys_user')insert({ user_name : '李富贵', role : 'admin'})

// insert into sys_user(user_name,role) values('李富贵','admin')

2,update

return dbtable('base_dict')primary('code')update({ code: 'insertTerst', name : '测试insert'})

//update base_dict set name = where code =

3,save

用法和insert相似

return dbtable('sys_user')primary('id', uuid())save({user_name: '李富贵'});

// insert into sys_user(id,user_name) values('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx','李富贵');

4,select,page,where

return dbtable('sys_user')select()

return dbtable('sys_user')page()

return dbtable('sys_user')

where()

like('user_name','%李富贵%')

eq('role','admin')

select()

yml中配置分页参数

magic-api:

page-config:

size: size # 页大小的请求参数名称

page: page # 页码的请求参数名称

default-page: 1 # 未传页码时的默认首页

default-size: 10 # 未传页大小时的默认页大小

自动分页

使用yml中配置的分页参数

return dbpage("""select from base_dict_detail""")

手动分页

跳过前3条记录,然后取5条

return dbpage("""select from base_dict_detail""",5,3)

自定义分页参数获取

实现 PageProvider接口,复写getPage方法 {

public Page getPage(RuntimeContext runtimeContext) {

long page = 2;

long pageSize = 3;

return new Page(pageSize, (page - 1) pageSize);

}

此模式会覆盖yml的配置内容

目前内置了三种状态码,分别为 执行成功(1),参数验证失败(0),以及系统异常(-1)

自定义状态码

magic-api:

response-code-config:

success: 200 #执行成功的code值

invalid: 400 #参数验证未通过的code值

exception: 500 #执行出现异常的code值

默认返回格式

{

"code": 1, // 状态码

"message": "success", // 状态说明

"data": , // 返回的数据内容

"timestamp": 1629610503506, // 服务器时间

"executeTime": 1 // 执行时间

}

自定义返回格式

magic-api:

response: |- #配置JSON格式,格式为magic-script中的表达式

{

code: code,

message: message,

data,

timestamp,

requestTime,

executeTime,

}

自定义结构配置

实现ResultProvider接口,重写buildResult方法

引入swagger依赖

在yml文件中配置

magic-api:

swagger-config:

version: 100

description: magic测试文档

title: magic测试

name: 配置化实现

location: /v2/api-docs/magic-api/swagger2json

Magic-api通过springboot自动配置的方式配置了resource,dataSource,interceptor等内容。

在服务启动时,生成MagicConfiguration注入容器时,通过mappingHandlerMappingregisterAllMapping();来注册所有映射(即在界面上配置的接口请求地址和接口的实际处理类、方法的映射)。映射关系注册到handleMapping中,并在内存中通过ConcurrentHashMap来缓存映射关系

接口调用时,在DispatcherServlet中通过url去寻找handler,找到magic-api的统一处理RequestHandler以及处理方法invoke。

在invoke中根据请求方法和路径获取接口信息封装在ApiInfo中,然后进行参数的验证封装。实际脚本的执行,以及对返回结果的包装

这个根据公司的框架要求,正产的api接口每个公司的规定都不一样。比如说有些公司的请求数据是不需要加密的,通过api就可以调用获取,有些公司为了数据的安全性考虑是加密的,即使你获取到了请求不解密你还是无法读取正常的数据的,所以这个要根据公司的规范要求来,才能前后端通信,现在基本都前后端分离开发了,按照公司开发文档要求开发接口,前段根据接口文档进行参数解析映射,完成业务逻辑操作。

用Curl吧

$host = 'url';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $host);

// 返回结果

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HEADER, 0);

// 使用POST提交

curl_setopt($ch, CURLOPT_POST, 1);

// POST参数

$str = array('a=1','b=2','c=3');

curl_setopt($ch, CURLOPT_POSTFIELDS, $str);

// 结果

$res = curl_exec($ch);

curl_close($ch);

我们知道API其实就是应用程序编程接口,可以把它理解为是一种通道,用来和不同软件系统间进行通信,本质上它是预先定义的函数。API有很多种形式,最为常见的就是以HTTP协议来提供服务(如:RESTful),只要符合规范就可正常使用。现在各类企业在信息化这块都会用到第三方提供的API,也会提供API给第三方调用,因此设计API也是需要慎重的。

具体该如何开发设计一个良好的API接口呢?

明确功能

在设计之初就需要将API详细功能整理出来,按业务功能点或模块来划分,明确此API需要提供哪些功能。

代码逻辑清晰

保持代码整洁性,增加必要的注释,接口确保功能单一,如果一个接口需要复杂的业务逻辑,建议拆分成多个接口或者将功能独立封装成公共方法,避免接口里代码过多,不利于后期人员维护和后期迭代。

必要的安全校验机制

目前Web应用很容易遭遇数据窃取、篡改、非法提交、重复请求等安全问题,API的安全校验机制是必不可少的。常用解决方案就是采用数字签名形式,将每个HTTP请求都加上签名,服务器端校验签名合法性来保证请求是否合法。

日志记录

为便于及时定位问题,日志是必不可少的。

降低耦合度

一个良好的API应该是越简单越好,如果API间业务耦合度过高很容易因某块代码异常导致相关API的不可用,尽可能避免API间的复杂调用关系。

返回有意义的状态码

API返回数据中要携带状态码数据,比如200代表请求正常,500代表服务器内部错误等。返回通用的状态码有利于问题定位,比如可参考以下状态码:

开发文档

既然API是提供给第三方或内部使用的,那开发文档是必不可少的,否则他人不知道如何调用。一个良好的API开发文档应包含以下元素:

1、当前API架构模式讲解、开发工具及版本、系统依懒等环境信息;

2、当前API提供哪些功能;

3、API模块间的依懒关系;

4、调用规则、注意事项;

5、部署注意事项等。

一个好的API必然是易使用,易看懂,易扩展,难误用,安全性高,功能强大的API。要做到上面几点并不容易,但是我们应当遵从上述原则结合业务本身合理的划分设计API

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 什么是API接口,具体是什么意思?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情