精华内容
下载资源
问答
  • 项目使用采取前后端分离的方式,后台提供API接口前端开发人员。这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员,最初打算使用word或markdown等文档方式进行交流,实际操作中却很少动手去...

    一、课程介绍

    你需要为客户编写Api调用手册?你需要测试你的Api接口?你需要和前端进行接口对接?那么这篇文章应该可以帮到你。 项目使用采取前后端分离的方式,后台提供API接口给前端开发人员。这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员,最初打算使用word或markdown等文档方式进行交流,实际操作中却很少动手去写。为了解决api接口文档生成的这个问题,目前有两种方案。

    1、微软自带的Microsoft.AspNet.WebApi.HelpPage

    2、第三方在线接口文档上成工具swagger。

    1.1、本次分享课程环境说明

    1)、Visual Studio 2019企业版。

    2)、.Net Framwork 4.7.2。

     1.2、正确的学习课程方式须知

    1)、视频+实例源代码配套学习,一千个读者就有一千个哈姆雷特,仁者见仁智者见智!

    2)、基础理论和实战演练相结合,切记眼高手低。

    3)、在学习的过程中,我们少一点抱怨,将多一份收获。

    如果您在学习过程中遇到任何的课程问题,请先私下直接找阿笨老师进行在线的沟通和交流。谢谢大家的理解和支持,预祝大家学习快乐!

    如果您同样对本次分享《ASP.NET WebAPI在线接口文档HelpPage和Swagger实战演练手册》课程感兴趣的话,那么请跟着阿笨一起学习吧。

    废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运工。

    二、概念名称含义介绍

    2.1、什么是Swagger?

    Swagger是一种Rest API的简单但强大的表示方式,她是标准的与语言无关,这种表示方式不但人可读,而且机器可读。 可以作为Rest API的交互式文档,也可以作为Rest API的形式化的接口描述,生成客户端和服务端的代码。

    2.2、在线接口文档生成工具那么多,为什么选择Swagger的原因?

    Swagger能成为最受欢迎的REST APIs文档生成工具的原因:

    Swagger 可以生成一个具有互动性的API控制台,开发者可以用来快速学习和尝试API。

    Swagger 可以生成客户端SDK代码用于各种不同的平台上的实现。

    Swagger 文件可以在许多不同的平台上从代码注释中自动生成。

    Swagger 有一个强大的社区,里面有许多强悍的贡献者。

    三、ASP.NET Web API在线接口文档实战演练手册

    3.1、ASP.NET Web API中如何使用HelpPage文件生成工具

    1、在Nuget添加Help Page组件。(如果采用建立的WEBAPI模板创建项目,默认已经自动的添加了)

    nuget install-package Microsoft.AspNet.WebApi.HelpPage

    2、在Nuget添加Test Client组件。

    nuget  install-package WebApiTestClient 或者nuget  install-package  WebApiTestOnHelpPage

    在Areas\HelpPage\Views\Help\Api.cshtml文件最某位位置添加以下代码:

      @Html.DisplayForModel("TestClientDialogs")

      @section Scripts {

          <link type="text/css" href="~/Areas/HelpPage/HelpPage.css" rel="stylesheet" />

          @Html.DisplayForModel("TestClientReferences")

      }

    3、如何解决在实际分层项目开发中的多项目类库文档注释显示的问题。

    3.2、ASP.NET Web API中如何使用Swagger文件生成工具

    NuGet上引用Swashbuckle

    添加Swagger Nuget包 Swashbuckle

    nuget install-package Swashbuckle

    Swashbuckle是.NET类库,可以将WebAPI所有开放的控制器方法生成对应SwaggerUI的JSON配置。再通过SwaggerUI显示出来

    在使用swagger的过程中,产生了一些小问题,例如:汉化、查询、控制器备注。

    配置到后swagger的访问地址如下:

    https://localhost:44330/swagger/ui/

    四、总结

    Swagger 是一款RESTFUL接口的、基于YAML、JSON语言的文档在线自动生成、代码自动生成的工具。而我最近做的项目用的是WebAPI,前后端完全分离,这时后端使用Swagger就能够很方便简洁的把所写的接口以及相关注释展示给前端人员,从而方便双方的沟通,提高工作效率。

    Swagger方便简洁,能够很大的提高我们的工作效率,还是值得一用的。阿笨分享的手册只是一些企业比较实用的功能点,Swagger的高级功能还有很多,比如文件上传,身份认证等等,这些就需要大家去慢慢摸索了。推荐一款Api 是高效、易用、功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务—Yapi。

    最后送大家一句话:希望大家在.NET开发的学习道路上一直跟着阿笨坚持下去吧! 


    腾讯课堂


    网易云课堂


    不信的话,扫一扫
    展开全文
  • //这里一般指后端项目API的前缀,例如 /baidu/*/*/1.api /mi/*/*/2.api const BASE_API = "" export function axiosIntercept(Vue, router) { const axiosIntercept = axios.create({ ...
  • Web Api跨域登录问题

    2016-03-31 11:01:00
    最近项目第一次尝试使用web api,照搬了一般mvc的Forms登录方式,在和前端对接的时候出现一个问题:  前端使用ajax调用登录接口完成登录后,再调用别的接口,被判断为未登录。  如果直接在浏览器中先后访问登录...

    最近项目第一次尝试使用web api,照搬了一般mvc的Forms登录方式,在和前端对接的时候出现一个问题:

      前端使用ajax调用登录接口完成登录后,再调用别的接口,被判断为未登录。

      如果直接在浏览器中先后访问登录接口和别的接口,则能识别为已登录。

    对于asp.net的这些机制其实我了解不多,所以我猜测为跨域导致了两次调用的http上下文不一致造成的,当时我们解决跨域问题的方式是在服务端配置文件的system.webServer节点下加入:

    <httpProtocol>
    <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
    </httpProtocol>

    我以为是这种解决方式不够完善,于是我开始在网上寻找并尝试各种解决跨域的方案,最重型的尝试就是把我的.net4.0版本的web api升级到.net4.5的web api2来使用Microsoft ASP.NET Web API 2 Cross-Origin Suppor支持跨域,结果发现这种方法只是控制更精细,和我们最开始用的那种简单粗暴的方式没有本质上的差别,别的方法也都是大同小异,于是此路不通。

    此时我想到自己定义一个简单的登录,具体实现就是:

      1.登录时创建一个票据,并在服务端保存一组票据和用户信息的键值对,将票据返回给客户端,客户端在访问需要登录的接口时必须带上此票据

      2.给需要登录验证的接口添加一个自定义的AuthorizeAttribute,在此属性中获取客户端传递的票据,来验证票据是否存在或者过期,如果票据合法,将对应的用户信息添加到http上下文,如果票据不合法,返回用户未登录的提示

    由于本人功力有限,并且因为项目涉及到充值提现等资金操作,已经定了要使用SSL,所以关于篡改,复用等传输安全方面的问题没有纳入考虑。

    以下是代码:

    用户信息模型(登录时将返回此信息至客户端):

    public class MemberTicket
    {
    public string ID { get; set; }
    public string LoginName { get; set; }
    public string Token { get; set; }
    public DateTime LoginDate { get; set; }
    }

    登录处理类:

    /// <summary>
    /// 自定义登录
    /// </summary>
    public class LoginHelper
    {
    /// <summary>
    /// 用户信息集合
    /// </summary>
    private static Dictionary<string, MemberTicket> Members = new Dictionary<string, MemberTicket>();
    /// <summary>
    /// 登录
    /// </summary>
    /// <param name="ticket">用户信息</param>
    public static void Login(MemberTicket ticket)
    {
    if (Members.Keys.Contains(ticket.Token))
    Members[ticket.Token] = ticket;
    else
    Members.Add(ticket.Token, ticket);
    }
    /// <summary>
    /// 退出登录
    /// </summary>
    /// <param name="Token">票据</param>
    public static void SignOut(string Token)
    {
    if (Members.Keys.Contains(Token))
    Members.Remove(Token);
    }
    /// <summary>
    /// 根据票据检查票据是否合法
    /// </summary>
    /// <param name="Token">票据</param>
    /// <returns></returns>
    public static MemberTicket Check(string Token)
    {
    if (!string.IsNullOrEmpty(Token) && Members.Keys.Contains(Token))
    {
    MemberTicket ticket = Members[Token];
    if (ticket != null && ticket.LoginDate.AddMinutes(CommonData.TimeOut) > CommonData.TimeNow())
    return ticket;
    }
    return null;
    }
    }

    定义用户对象(能保存于http上下文的结构):

    public class MemberPrincipal : IPrincipal
    {
    private string loginname;
    
    public string Loginname
    {
    get { return loginname; }
    set { loginname = value; }
    }
    
    private IIdentity _Identity;
    
    public IIdentity Identity
    {
    get { return _Identity; }
    set { _Identity = value; }
    }
    
    
    public bool IsInRole(string role)
    {
    return false;
    }
    
    public MemberPrincipal(string Name)
    {
    loginname = Name;
    _Identity = new GenericIdentity(loginname, "Forums");
    bool isok = _Identity.IsAuthenticated;
    }
    }

    保存用户信息到http上下文:

    public class PrincipalHelper
    {
    public static void SetPrincipal(IPrincipal principal)
    {
    Thread.CurrentPrincipal = principal;
    if (HttpContext.Current != null)
    {
    HttpContext.Current.User = principal;
    }
    }
    }

    关键部分,自定义登录策略:

    public class LoginAuthorize : AuthorizeAttribute
    {
    public override void OnAuthorization(HttpActionContext httpContext)
    {
    MemberTicket ticket = LoginHelper.Check(GetToken(httpContext.Request.RequestUri.Query));
    if (ticket == null)
    {
    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
    
    ResponseMessage<string> result = new ResponseMessage<string>();
    result.Header = new ResponseHeader();
    result.Header.State = (int)ResponseHeaderState.SignOut;
    result.Header.Message = "用户未登录";
    response.Content = new StringContent(JsonConvert.SerializeObject(result));
    
    httpContext.Response = response; 
    }
    else
    PrincipalHelper.SetPrincipal(new MemberPrincipal(ticket.LoginName));
    
    }
    
    public string GetToken(string Query)
    {
    if (!Query.Contains("Token"))
    return null;
    string[] Param = Query.Split('&');
    if (Param.Length == 0)
    return null;
    foreach (var item in Param)
    {
    if (!item.Contains("Token"))
    continue;
    string[] value = item.Split('=');
    if (value.Length == 0)
    return null;
    return value[1];
    }
    return null;
    }
    }

    返回消息结构:

    public class ResponseMessage<T>
    {
    /// <summary>
    /// 消息头
    /// </summary>
    public ResponseHeader Header { get; set; }
    /// <summary>
    /// 消息本体
    /// </summary>
    public T Body { get; set; }
    }
    
    public class ResponseHeader
    {
    /// <summary>
    /// 执行状态
    /// </summary>
    public int State { get; set; }
    /// <summary>
    /// 消息
    /// </summary>
    public string Message { get; set; }
    }

    最后将此属性加在需要登录验证的控制器或方法上即可。

    做完之后,目前是达到了我的预期,但是我的预期太低,所以自己也感觉弄得很low……希望各位大神小神大牛小牛不吝赐教,指点指点我应该往哪个方向优化登录机制

    转载于:https://www.cnblogs.com/chimeile/p/WebApi.html

    展开全文
  • Asp.Net Core 3.1 WebApi 如何关闭参数自动校验: .netCore参数自动校验的拦截,我们可以根据自己需求进行开启和关闭。 问题背景: 前段时间因为自己的私人项目前端对接时,遇到httpGet、Post请求,必须在参数...

    Asp.Net Core 3.1 WebApi 如何关闭参数自动校验:

    .netCore参数自动校验的拦截,我们可以根据自己需求进行开启和关闭。


    问题背景:

    前段时间因为自己的私人项目与前端对接时,遇到httpGet、Post请求,必须在参数数量以及数据类型完全匹配情况下才能正常请求。前端在核对接口时若是不小心多加了一个参数,或者数据类型弄错了,接口就会报错 400,经排查才发现,框架自己默认就启用了参数自动校验 ,这样使得接口被请求时,必须会按照编写的规则进行。

    原因分析:

    例如:我们在定义一个实体类作为入参时,采用post请求数据,
    启用参数自动校验:所有实体类属性的数据类型必须一致,否则会出现接口报错400;未启用自动校验:所有实体类属性的数据类型会自动变换, 比如类型为 int 类型,你传入 ‘abc’ 那么属性再被解析时,会自动转换成0,不会出现接口报错问题。
    但是为了安全性起见,最好启用


    1、在Startup类中,在ConfigureServices方法加入:

     //关闭参数自动校验,我们需要返回自定义的格式
     services.Configure<ApiBehaviorOptions>((o) =>
     {
         o.SuppressModelStateInvalidFilter = true;
     });
    

    展开全文
  • 实际项目中非常需要写文档,提高Java服务端和Web前端以及移动端的对接效率。  听说Swagger这个工具,还不错,就网上找了些资料,自己实践了下。   一:Swagger介绍 Swagger是当前最好用的Restful API文档生成...

    实际项目中非常需要写文档,提高Java服务端和Web前端以及移动端的对接效率。

      听说Swagger这个工具,还不错,就网上找了些资料,自己实践了下。

     

    一:Swagger介绍

    Swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目

    实现了与SpingMVC框架的无缝集成功能,方便生成spring restful风格的接口文档,

    同时swagger-ui还可以测试spring restful风格的接口功能。

     

    官方网站为:http://swagger.io/

     

    中文网站:http://www.sosoapi.com

     

     

    二:Swagger与Spring MVC集成步骤

     

    1.Maven关键配置

     

            

    
     
    1. <dependency>

    2. <groupId>com.mangofactory</groupId>

    3. <artifactId>swagger-springmvc</artifactId>

    4. <version>1.0.2</version>

    5. </dependency>

    6.  
    7. <dependency>

    8. <groupId>org.springframework</groupId>

    9. <artifactId>spring-webmvc</artifactId>

    10. <version>4.1.6.RELEASE</version>

    11. </dependency>

     

     

    2. 插件配置

       CustomJavaPluginConfig

     

    3.复制swagger的相关js等静态资源到webapp目录。

       swagger-ui.js之类的。

       我copy过一次,但是有问题,最后从网上下载了一个项目,可以直接用的那种。

       然后自己再逐步改造。

     

    4.启动项目

       http://localhost:8080/

     

     

    三、常见swagger注解一览与使用

    最常用的5个注解

    @Api:修饰整个类,描述Controller的作用

    @ApiOperation:描述一个类的一个方法,或者说一个接口

    @ApiParam:单个参数描述

     

    @ApiModel:用对象来接收参数

    @ApiProperty:用对象接收参数时,描述对象的一个字段

     

    其它若干

     

    @ApiResponse:HTTP响应其中1个描述

    @ApiResponses:HTTP响应整体描述

     

     

     

    @ApiClass

    @ApiError

    @ApiErrors

     

     

     

    @ApiParamImplicit

    @ApiParamsImplicit

     

    四、关键代码和实际例子

        例子1:

       

    
     
    1. @ApiOperation(value = "获得用户列表", notes = "列表信息", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)

    2. @ResponseBody

    3. @RequestMapping(value = "list", method = RequestMethod.POST)

    4. public Result<User> list(

    5. @ApiParam(value = "分类ID", required = true) @RequestParam Long categoryId,

    6. @ApiParam(value = "token", required = true) @RequestParam String token) {

    7. Result<User> result = new Result<User>();

    8. User user = new User();

    9. result.setData(user);

    10. return result;

    11. }

     

     

       @ApiParam(value = "token", required = true) @RequestParam String token

    Web前端/移动端HTTP请求方式:直接把参数附带到URL后面,或者用AJAX方法,表单提交。

     

      例子2:

    
     
    1. @ApiOperation(value = "update用户", notes = ")", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)

    2. @ResponseBody

    3. @RequestMapping(value = "update", method = RequestMethod.GET/*,produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE*/)

    4. public Result<String> update(User user) {

    5. String u = findUser(user);

    6. System.out.println(u);

    7. return null;

    8. }

     

     

     当参数太多的时候,需要定义太多的参数,排版看起来很不舒服。

    这个时候,可以使用对象来接收。

    @ApiModel(value = "用户对象",description="user2") 

    public class User extends CommonParam{

     

    }

    Web前端/移动端HTTP请求方式:直接把参数附带到URL后面,或者用AJAX方法,表单提交。

    这里面存在一个小问题,当后端用对象User来接收参数的时候,Swagger自带的工具是这样的:

     

    这种形式,并不是表单提交,或者把参数附加到URL的后面。

    我们只能手动构造URL,附带参数去提交。

    如果需要测试的话!

     

    例子3:

    
     
    1. public Result<String> add(@RequestBody User user) {

    2. String u = findUser(user);

    3. System.out.println(u);

    4. return null;

    5. }

     

     

    Web前端/移动端HTTP请求方式:必须把参数,放到request请求的body中去。

    后端不能直接用request.getParam("token")这种。

     

    获得request body中的数据,手动转换成目标数据。

        String charReader(HttpServletRequest request) throws IOException {

     

            BufferedReader br = request.getReader();

     

            String str, wholeStr = "";

            while ((str = br.readLine()) != null) {

                wholeStr += str;

            }

            return wholeStr;

     

        }

     

    个人推荐

    1.参数不多的时候,用例子1,用@ApiParam注解生成文档。

      swagger可视化界面,可以直接设置参数,发送请求来测试

    2.参数比较多的时候,用例子2,用对象来接收参数,在对象里针对每个字段,@ApiModelProperty注解生成文档。

       swagger可视化界面,可以直接设置参数,但是无法接收到。

      因此,推荐使用其它HTTP请求或POST模拟工具,发送请求,模拟测试。

     

    不推荐例子3,不通用,局限性比较大。

     

     

    五、若干截图

     

     

    六、源代码

    
     
    1. package cn.fansunion.swagger.serverapi.controller;

    2.  
    3. import org.springframework.http.MediaType;

    4. import org.springframework.stereotype.Controller;

    5. import org.springframework.web.bind.annotation.RequestBody;

    6. import org.springframework.web.bind.annotation.RequestMapping;

    7. import org.springframework.web.bind.annotation.RequestMethod;

    8. import org.springframework.web.bind.annotation.RequestParam;

    9. import org.springframework.web.bind.annotation.ResponseBody;

    10.  
    11. import com.wordnik.swagger.annotations.Api;

    12. import com.wordnik.swagger.annotations.ApiOperation;

    13. import com.wordnik.swagger.annotations.ApiParam;

    14.  
    15. /**

    16. * 小雷FansUnion-一个有创业和投资经验的资深程序员-全球最大中文IT社区CSDN知名博主-排名第119

    17. * 博客:http://blog.csdn.net/fansunion

    18. *

    19. */

    20. @Api(value = "user", description = "用户管理", produces = MediaType.APPLICATION_JSON_VALUE)

    21. @Controller

    22. @RequestMapping("user")

    23. public class UserController {

    24.  
    25. // 列出某个类目的所有规格

    26. @ApiOperation(value = "获得用户列表", notes = "列表信息", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)

    27. @ResponseBody

    28. @RequestMapping(value = "list", method = RequestMethod.POST)

    29. public Result<User> list(

    30. @ApiParam(value = "分类ID", required = true) @RequestParam Long categoryId,

    31. @ApiParam(value = "分类ID", required = true) @RequestParam Long categoryId2,

    32. @ApiParam(value = "token", required = true) @RequestParam String token) {

    33. Result<User> result = new Result<User>();

    34. User user = new User();

    35. result.setData(user);

    36. return result;

    37. }

    38.  
    39. @ApiOperation(value = "添加用户", notes = "获取商品信息(用于数据同步)", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)

    40. @ResponseBody

    41. @RequestMapping(value = "add", method = RequestMethod.POST)

    42. // @RequestBody只能有1个

    43. // 使用了@RequestBody,不能在拦截器中,获得流中的数据,再json转换,拦截器中,也不清楚数据的类型,无法转换成java对象

    44. // 只能手动调用方法

    45. public Result<String> add(@RequestBody User user) {

    46. String u = findUser(user);

    47. System.out.println(u);

    48. return null;

    49. }

    50.  
    51. @ApiOperation(value = "update用户", notes = "获取商品信息(用于数据同步)", httpMethod = "POST", produces = MediaType.APPLICATION_JSON_VALUE)

    52. @ResponseBody

    53. @RequestMapping(value = "update", method = RequestMethod.GET)

    54. public Result<String> update(User user) {

    55. String u = findUser(user);

    56. System.out.println(u);

    57. return null;

    58. }

    59.  
    60. private String findUser(User user) {

    61. String token = user.getToken();

    62. return token;

    63. }

    64. }


     

    
     
    1. package cn.fansunion.swagger.serverapi.controller;

    2.  
    3. import com.wordnik.swagger.annotations.ApiModel;

    4. import com.wordnik.swagger.annotations.ApiModelProperty;

    5.  
    6. /**

    7. * 小雷FansUnion-一个有创业和投资经验的资深程序员-全球最大中文IT社区CSDN知名博主-排名第119

    8. * 博客:http://blog.csdn.net/fansunion

    9. *

    10. */

    11. @ApiModel(value = "用户对象", description = "user2")

    12. public class User extends CommonParam {

    13.  
    14. @ApiModelProperty(value = "商品信息", required = true)

    15. private String name;

    16. @ApiModelProperty(value = "密码", required = true)

    17. private String password;

    18.  
    19. @ApiModelProperty(value = "性别")

    20. private Integer sex;

    21. @ApiModelProperty(value = "密码", required = true)

    22. private String token;

    23.  
    24. public String getToken() {

    25. return token;

    26. }

    27.  
    28. public void setToken(String token) {

    29. this.token = token;

    30. }

    31.  
    32. public String getName() {

    33. return name;

    34. }

    35.  
    36. public void setName(String name) {

    37. this.name = name;

    38. }

    39.  
    40. public String getPassword() {

    41. return password;

    42. }

    43.  
    44. public void setPassword(String password) {

    45. this.password = password;

    46. }

    47.  
    48. public Integer getSex() {

    49. return sex;

    50. }

    51.  
    52. public void setSex(Integer sex) {

    53. this.sex = sex;

    54. }

    55.  
    56. }

     

    
     
    1. package cn.fansunion.swagger.serverapi.swagger;

    2.  
    3. import org.springframework.beans.factory.annotation.Autowired;

    4. import org.springframework.context.annotation.Bean;

    5. import org.springframework.context.annotation.Configuration;

    6. import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;

    7. import org.springframework.web.servlet.config.annotation.EnableWebMvc;

    8. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

    9.  
    10. import com.mangofactory.swagger.configuration.SpringSwaggerConfig;

    11. import com.mangofactory.swagger.models.dto.ApiInfo;

    12. import com.mangofactory.swagger.paths.SwaggerPathProvider;

    13. import com.mangofactory.swagger.plugin.EnableSwagger;

    14. import com.mangofactory.swagger.plugin.SwaggerSpringMvcPlugin;

    15.  
    16. @Configuration

    17. @EnableWebMvc

    18. @EnableSwagger

    19. public class CustomJavaPluginConfig extends WebMvcConfigurerAdapter {

    20.  
    21. private SpringSwaggerConfig springSwaggerConfig;

    22.  
    23. @Autowired

    24. public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {

    25. this.springSwaggerConfig = springSwaggerConfig;

    26. }

    27.  
    28. /**

    29. * 链式编程 来定制API样式 后续会加上分组信息

    30. *

    31. * @return

    32. */

    33. @Bean

    34. public SwaggerSpringMvcPlugin customImplementation() {

    35. return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)

    36. .apiInfo(apiInfo()).includePatterns(".*")

    37. .useDefaultResponseMessages(false)

    38. // .pathProvider(new GtPaths())

    39. .apiVersion("0.1").swaggerGroup("user");

    40.  
    41. }

    42.  
    43. private ApiInfo apiInfo() {

    44. ApiInfo apiInfo = new ApiInfo("小雷移动端API接口平台",

    45. "提供详细的后台所有Restful接口", "http://blog.csdn.net/FansUnion",

    46. "FansUnion@qq.com", "小雷博客", "http://blog.csdn.net/FansUnion");

    47. return apiInfo;

    48. }

    49.  
    50. @Override

    51. public void configureDefaultServletHandling(

    52. DefaultServletHandlerConfigurer configurer) {

    53. configurer.enable();

    54. }

    55.  
    56. class GtPaths extends SwaggerPathProvider {

    57.  
    58. @Override

    59. protected String applicationPath() {

    60. return "/restapi";

    61. }

    62.  
    63. @Override

    64. protected String getDocumentationPath() {

    65. return "/restapi";

    66. }

    67. }

    68.  
    69. }

     

    七、项目下载地址

      http://git.oschina.net/fansunion/swagger-server-api/tree/master/

     

    八、参考资料

    http://blog.csdn.net/jia20003/article/details/50700736

    http://www.cnblogs.com/quanyongan/archive/2013/04/16/3024741.html

    http://www.cnblogs.com/h9527/p/5506956.html

    http://www.cnblogs.com/yuananyun/p/4993426.html

    --------------------- 本文来自 小雷FansUnion 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/FansUnion/article/details/51923720?utm_source=copy

    展开全文
  • 理论上所有支持 SQL 与 JDBC/ODBC 的软件,都可以用本项目对接 CRUD,待测试: DB2, Elasticsearch, ClickHouse, OceanBase, Presto, Spark, Hive(延伸支持 Hadoop, Spark), Phoenix(延伸支持 HBase), Presto/Trino...
  • Swagger接口框架

    千次阅读 2018-06-12 21:03:33
    提高Java服务端和Web前端以及移动端的对接效率。 2)Swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目实现了与SpingMVC框架的无缝集成功能,方便生成spring restful风格的接口文档,...
  • 最近在重构一个项目,主要工作是去对接后台C++的webservice接口,获取相关数据,在浏览器上显示数据统计信息,实时更新状态,完成一些基础配置,这个过程不需要web后台去连接数据库,只需要进行数据传递。将web端...
  • mall-admin-web是一个电商后台管理系统的前端项目,基于Vue+Element实现。主要包括商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等功能。 项目演示 项目在线...
  • 实际项目中非常需要写文档,提高Java服务端和Web前端以及移动端的对接效率。 Swagger是当前最好用的Restful API文档生成的开源项目,通过swagger-spring项目 实现了与SpingMVC框架的无缝集成功能,方便生成s
  • 学习笔记(2)基本配置以及高性能高可用...gmall_admin_web: 后台管理系统对接前端web项目 gmall_api: 不包含mapper,impl,mapper应该是每个具体实现里的,impl应该是服务类的真正实现。api保留了接口,javabean。
  • (1)我们根据web项目对接数据库对接思路来思考:连接数据库-->获取数据库的数据(请求参数)-->数据库数据返回到前端,封装数据展示给前端。 (2)我们分清楚两块:谁调用谁(谁向谁传递参数):这一块主要...
  • News-Rec-System-源码

    2021-03-21 01:25:18
    三是方便运维小伙伴们快速理解Web项目开发,无须深入理解Flask和前端立即完成此类项目开发。 特色 初始化Flask,对异常处理,数据库,表单验证,权限验证都做好二次封装,调用更简单,通用性强。 前端LayUI,对数据...
  • 在实际工作中,前后端的接口联调对接工作量占Web前端人员日常工作的30%-50%,甚至会更高。接下来就给大家讲解前后端分离接口。 为什么要前后端分离? 把前端与后端独立起来去开发,放在两个不同的服务器,需要独立...
  • 服务端开发

    2021-02-01 21:35:56
    (1)服务器端:编写接口协议文档,服务器环境架设(国内一般都是用阿里云服务器,国 外一般用亚马逊),设计数据库和编写API接口。 (2)APP 端:根据UI设计图进行界面开发,UI 开发完成则进入和服务端接口对接,...
  • 本地路径:D:\QLTest(测试demo目录)\接口Api\WebApi4 2 起码,选择保存路径。最好统一路径存放,好管理。 去掉勾选创建 走三步流程 一 安装包,导入库。 二 根据数据库生成模型 三是创建...
  • 本后台有提供简单页面进行认证逻辑,目的是为了开发过程方便给前端开发人员提供Swagger-ui的API接口文档。 项目结构 cache、common、dal封装缓存、公用工具类以及数据访问层代码,专门用于打成jar包为模块提供服务的...
  • JeePlatform项目是一款以SpringBoot为核心框架,集ORM框架Mybatis,Web层框架SpringMVC和多种开源组件框架而成的一款通用基础平台,代码已经捐赠给开源中国社区:https://www.oschina.net/p/jeeplatform 代码结构图...
  • PluginOK中间件提供的前端集成接口语言无关,网页中只需使用简单的JS脚本即可完成与B/S系统的对接,让浏览器成为各种信息化系统集成的最佳容器,彻底解决B/S系统的各种痛点和难点,让桌面程序迁移到浏览器中运行从此...
  • appserver(手机app服务),appapi(erp,或者其他接口对接), 不同的业务,不同的设备,进入不同的入口,各个入口共用服务层services, 但是modules部分独立,这样相互干扰最小,可以相互独立开发。 后台封装化...
  • PluginOK中间件提供的前端集成接口语言无关,网页中只需使用简单的JS脚本即可完成与B/S系统的对接,让浏览器成为各种信息化系统集成的最佳容器,彻底解决B/S系统的各种痛点和难点,让桌面程序迁移到浏览器中运行从此...
  • eBSite皮肤由模板与样式组合,有了模板,可以让网页的展示更加灵活,eBSite为模板的制作提供了丰富的API。 7.出色的部件 部件相当于一个代码块,部件的开发很简单,只要实现官方提供的接口即可完成,部件要配件...
  • 项目为一个前后端分离的外卖 Web App (SPA) 项目 使用了 Vue 全家桶+ES6+Webpack 等前端最新技术 Vue:用于构建用户界面的 MVVM 框架 vue-router:为单页面应用提供的路由系统 vuex:Vue 集中状态管理,在多个...
  • GoodProject Maven Webapp.zip

    2019-05-12 14:06:27
    图灵机器人提供API、SDK及前端组件[2] 用户可快速的选择适用的方式[2] ,为产品接入图灵机器人大脑[2] ,实现产品人工智能交互升级。[2] 图灵机器人平台具备灵活的多场景整体解决方案[2] ,满足各场景产品的多样化...

空空如也

空空如也

1 2
收藏数 25
精华内容 10
关键字:

web前端项目对接api接口