Giter Site home page Giter Site logo

xuxueli / xxl-api Goto Github PK

View Code? Open in Web Editor NEW
878.0 74.0 406.0 4.38 MB

A api management platform.(API管理平台XXL-API)

Home Page: http://www.xuxueli.com/xxl-api/

License: GNU General Public License v3.0

Java 99.96% Dockerfile 0.04%
xxl xxl-api api document java

xxl-api's Introduction

XXL-API

XXL-API, a api management platform.
-- Home Page --

Introduction

XXL-API is a powerful and easy-to-use API management platform that provides "management", "documentation", "Mock", and "test" functions for the API. Open source code, out-of-the-box.

XXL-API 是一个强大易用的API管理平台,提供API的"管理"、"文档"、"Mock"和"测试"等功能。现已开放源代码,开箱即用。

Documentation

Communication

Features

  • 1、极致简单:交互简洁,一分钟上手;
  • 2、项目隔离:API以项目为维度进行拆分隔离;
  • 3、分组管理:单个项目内的API支持自定义分组进行管理;
  • 4、标记星级:支持标注API星级,标记后优先展示;
  • 5、API管理:创建、更新和删除API;
  • 6、API属性完善:支持设置丰富的API属性如:API状态、请求方法、请求URL、请求头部、请求参数、响应结果、响应结果格式、响应结果参数、API备注等等;
  • 7、markdown:支持为API添加markdown格式的备注信息;
  • 8、Mock:支持为API定义Mock数据并制定数据响应格式,从而快速提供Mock接口,加快开发进度;
  • 9、在线测试:支持在线对API进行测试并保存测试数据,提供接口测试效率;
  • 10、权限控制:支持以业务线为维度进行用户权限控制,分配权限才允许操作业务线下项目接口和数据类型,否则仅允许查看;

Contributing

Contributions are welcome! Open a pull request to fix a bug, or open an Issue to discuss a new feature or change.

欢迎参与项目贡献!比如提交PR修复一个bug,或者新建 Issue 讨论新特性或者变更。

接入登记

更多接入的公司,欢迎在 登记地址 登记,登记仅仅为了产品推广。

Copyright and License

This product is open source and free, and will continue to provide free community technical support. Individual or enterprise users are free to access and use.

  • Licensed under the GNU General Public License (GPL) v3.
  • Copyright (c) 2015-present, xuxueli.

产品开源免费,并且将持续提供免费的社区技术支持。个人或企业内部可自由的接入和使用。

Donate

No matter how much the amount is enough to express your thought, thank you very much :) To donate

无论金额多少都足够表达您这份心意,非常感谢 :) 前往捐赠

xxl-api's People

Contributors

backwind1233 avatar happyrobert avatar mrwb avatar ordinaryyzh avatar xuxueli avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xxl-api's Issues

数据类型管理

新增两个数据类型后,需要将其中一个包含另外一个的时候,会报错
1
2

Https接口运行出现异常

异常信息如下:
2017-07-26 10:22:37,944 - xxl-api - ERROR [com.xxl.api.admin.controller.XxlApiTestController] - <sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target> javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276) at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868) at sun.security.ssl.Handshaker.process_record(Handshaker.java:804) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:290) at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:259) at org.apache.http.impl.conn.HttpClientConnectionOperator.connect(HttpClientConnectionOperator.java:125) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:319) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:363) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:219) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:195) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106) at com.xxl.api.admin.controller.XxlApiTestController.remoteCall(XxlApiTestController.java:232) at com.xxl.api.admin.controller.XxlApiTestController.run(XxlApiTestController.java:205) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:222) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:814) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:737) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:969) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:871) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:845) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450) at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:326) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385) at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) at sun.security.validator.Validator.validate(Validator.java:260) at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326) at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231) at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126) at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323) ... 58 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196) at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268) at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380) ... 64 more

建议:简化测试页

从下拉框里选择测试接口,比如
2.6 获取用户 /user/get
2.x 获取某某 /xx/get
根据选择的接口 必填参数以及参数说明按照新建该接口时输入的内容 默认显示在测试页面,选择不同的接口时清除之前的参数等内容

关于升级后数据库更新的问题

每次升级后数据库不需要更新的么...?
比如我之前是1.0.1,这次升级到1.1.0,数据库如何不删除原库更新的...?还是说数据库不需要更新...?

一个建议

重新登录后, 希望能回到登录操作前的页面

对于响应状态码为302的请求未能正确展示“Location”

如图所示,状态码为302,Header中的Location字段未正确显示:
image
检查发现com.xxl.api.admin.controller.XxlApiTestController中获取header方法错误

if (statusCode == 302) {
   responseContent += ";Redirect地址:" + response.getHeaders("Location");
}

替换为:

if (statusCode == 302) {
   responseContent += ";Redirect地址:" + response.getFirstHeader("Location").getValue();
}

编译报错,缺少两个包,手工添加如下就正常了!

	<dependency>
		<groupId>commons-collections</groupId>
		<artifactId>commons-collections</artifactId>
		<version>3.2.1</version>
	</dependency>

	<dependency>
		<groupId>org.apache.httpcomponents</groupId>
		<artifactId>httpcore</artifactId>
		<version>4.3.2</version>
	</dependency>

还有不少要改进的地方啊

public ReturnT<String> update(HttpServletRequest request, XxlApiDocument xxlApiDocument) {

更新方法太粗暴,不支持传部分参数。既然load老数据出来,就对传过来不为空的那些参数进行更新不就很好吗,类似于mybatis的updateBySelective这样的方法.

添加和更新都提供了接口,但详情不加一个接口,蛋疼。想通过http做一下自动化扩展,很难.

提几个建议

  • 权限管理没有支持更多维度的
  • 没有api版本管理
  • 各环境接口调用日志、监控、告警

请问,如何POST JSON格式数据

工程已经成功运行起来了,感觉跟crapapi有点类似,总体感觉更简洁一些。
目前,有个问题请教一下
如何POST一个JSON串?
目前,我增加了一个请求头部:Content-Type application/json;增加了两个请求参数(id,name),分类为JSON类型,提交请求之后,服务器返回异常。

注:使用postman做测试,可以设置raw类型参数,直接贴json串,请求正常返回

是否可加入导出功能

感谢作者分享了这个项目,我有个需求想将编写的API导出为HTML或者PDF,因为接口文档是给客户看的,但是我们没有在外网公开API站点,只想提供一份文档给对方,您觉得可以加入这个功能吗?

功能建议

是不是应该对API分配加权限,有些接口是供用的。IOS/安卓/WEB 端用户分别进来看到的接口有些一样,有些不一样。。。这样的楼主有考虑吗?我现在其实也不分什么项目,都是一个APP加WEB 很多接口是共用的,有些又是单独的。就像在上面发布一次接口,给这个人加权限,他就能看到指定接口就行。

在我的分支此项的数据库由MySQL换成了PostgreSQL

完善了代码规范,修复了测试工具类的一个bug ,当请求参数为json时,虽然可以正常发送请求报文,但当我将此次请求报文保存至数据库时,会在后台自动形成转义符如\ ,\n , \t 等等,这样是没有问题的,但当我在接口详情页运行Test历史时,请求参数无法正常填充。因为源项目的请求参数栏使用的时input 单方文本框,当回显数据时,解析json内的转义符就无法正常显示,因此我将参数栏的文本标签换为了textarea ,这样就能正常填充携带转义符的数值了。希望重构后的项目会给需要的人带来帮助。
image

功能建议-项目排序

建议项目可以提供排序功能,目前按照默认倒序排列的,希望能加上排序功能,谢谢

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.