精华内容
下载资源
问答
  • Nginx代理后端API 解决前端跨域问题
    千次阅读
    2022-02-14 17:07:08
    {
       server {
        listen 3000;   ### 监听的端口号
        server_name localhost;
    
        location / {
            root /var/www/mainApp; ###配置应用的文件夹
            index index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
        
        ###代理后端API的配置
        location /api/ {
            proxy_pass http://192.168.0.1:8080/;
        }
    }
    

    nginx配置完成后在  sbin 目录下面执行nginx -s reload重载配置后即可顺利访问

    更多相关内容
  • .Net Core 开发电商后端API 从0到精通吃透RESTful
  • 在单个项目中编写前端和后端API可以加快开发(imo),此插件实质上将Next.js的API路由引入了Vite应用。 :yellow_heart:通过在GitHub上赞助他,可以帮助他成为一名全职开源维护者。 vite-plugin-mix动机在单个项目中...
  • 扫码点餐系统(用户端+商家端+后端API).rar
  • 使用freeMarker模板和Spring boot后端API接口实现查询用户列表的功能。 http://localhost:8080/ftl/index
  • 后端API接口

    千次阅读 2020-11-03 10:56:39
    后端API接口 前言 在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经...

    后端API接口

    前言

    在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式,(题外话:前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了)。

     

    一般系统的大致整体架构图如下:

     

     

    需要说明的是,有些小伙伴会回复说,这个架构太简单了吧,太low了,什么网关啊,缓存啊,消息中间件啊,都没有。因为老顾这篇主要介绍的是API接口,所以我们聚焦点,其他的模块小伙伴们自行去补充。

    接口交互

    前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。

    针对URL路径的restful风格,以及传入参数的公共请求头的要求(如:app_version,api_version,device等),老顾这里就不介绍了,小伙伴们可以自行去了解,也比较简单。

    着重介绍一下后端服务器如何实现把数据返回给前端?

    返回格式

    后端返回给前端我们一般用JSON体方式,定义如下:

     

    {
        #返回状态码
        code:integer,       
        #返回信息描述
        message:string,
        #返回值
        data:object
    }

     

    CODE状态码

     

    code返回状态码,一般小伙伴们是在开发的时候需要什么,就添加什么。

     

    如接口要返回用户权限异常,我们加一个状态码为101吧,下一次又要加一个数据参数异常,就加一个102的状态码。这样虽然能够照常满足业务,但状态码太凌乱了

     

    我们应该可以参考HTTP请求返回的状态码

     

    :下面是常见的HTTP状态码:
    200 - 请求成功
    301 - 资源(网页等)被永久转移到其它URL
    404 - 请求的资源(网页等)不存在
    500 - 内部服务器错误

     

     

    我们可以参考这样的设计,这样的好处就把错误类型归类到某个区间内,如果区间不够,可以设计成4位数。

     

    #1000~1999 区间表示参数错误
    #2000~2999 区间表示用户错误
    #3000~3999 区间表示接口异常

     

    这样前端开发人员在得到返回值后,根据状态码就可以知道,大概什么错误,再根据message相关的信息描述,可以快速定位。

     

    Message

     

    这个字段相对理解比较简单,就是发生错误时,如何友好的进行提示。一般的设计是和code状态码一起设计,如

     

     

    再在枚举中定义,状态码

     

     

    状态码和信息就会一一对应,比较好维护。

     

    Data

     

    返回数据体,JSON格式,根据不同的业务又不同的JSON体。

    我们要设计一个返回体类Result

     

     

    控制层Controller

    我们会在controller层处理业务请求,并返回给前端,以order订单为例

     

     

    我们看到在获得order对象之后,我们是用的Result构造方法进行包装赋值,然后进行返回。小伙伴们有没有发现,构造方法这样的包装是不是很麻烦,我们可以优化一下。

    美观优化

    我们可以在Result类中,加入静态方法,一看就懂

     

     

    那我们来改造一下Controller

     

     

    代码是不是比较简洁了,也美观了。

    优雅优化

    上面我们看到在Result类中增加了静态方法,使得业务处理代码简洁了。但小伙伴们有没有发现这样有几个问题:

    1、每个方法的返回都是Result封装对象,没有业务含义
    2、在业务代码中,成功的时候我们调用Result.success,异常错误调用Result.failure。是不是很多余
    3、上面的代码,判断id是否为null,其实我们可以使用hibernate validate做校验,没有必要在方法体中做判断。

    我们最好的方式直接返回真实业务对象,最好不要改变之前的业务方式,如下图

     

     

    这个和我们平时的代码是一样的,非常直观,直接返回order对象,这样是不是很完美。那实现方案是什么呢?

    实现方案

    小伙伴们怎么去实现是不是有点思路,在这个过程中,我们需要做几个事情

    1、定义一个注解@ResponseResult,表示这个接口返回的值需要包装一下
    2、拦截请求,判断此请求是否需要被@ResponseResult注解
    3、核心步骤就是实现接口ResponseBodyAdvice和@ControllerAdvice,判断是否需要包装返回值,如果需要,就把Controller接口的返回值进行重写。

    注解类

     

    用来标记方法的返回值,是否需要包装

     

     

    拦截器

     

    拦截请求,是否此请求返回的值需要包装,其实就是运行的时候,解析@ResponseResult注解

     

     

    此代码核心思想,就是获取此请求,是否需要返回值包装,设置一个属性标记。

     

    重写返回体

     

     

    上面代码就是判断是否需要返回值包装,如果需要就直接包装。这里我们只处理了正常成功的包装,如果方法体报异常怎么办?处理异常也比较简单,只要判断body是否为异常类。

     

     

    怎么做全局的异常处理,篇幅原因,老顾这里就不做介绍了,只要思路理清楚了,自行改造就行。

     

    重写Controller

     

     

    在控制器类上或者方法体上加上@ResponseResult注解,这样就ok了,简单吧。到此返回的设计思路完成,是不是又简洁,又优雅。

    总结

    这个方案还有没有别的优化空间,当然是有的。如:每次请求都要反射一下,获取请求的方法是否需要包装,其实可以做个缓存,不需要每次都需要解析。当然整体思路了解,小伙伴们就可以在此基础上面自行扩展。谢谢!!!

    展开全文
  • python写后端api

    2020-12-04 01:11:19
    有没有大神分享一个纯python无框架写的webapi后端...python自学完了,想写个api练练手,CSS布局HTML小编今天和大家分享个案例代码来借鉴借鉴精华你可能有误解,无框架要比使用框架复杂的多。 你刚学完,应该是先试试...

    有没有大神分享一个纯python无框架写的webapi后端...python自学完了,想写个api练练手,CSS布局HTML小编今天和大家分享个案例代码来借鉴借鉴精华

    你可能有误解,无框架要比使用框架复杂的多。 你刚学完,应该是先试试简单的框架。

    python怎么响应后端发送get,post请CSS布局HTML小编今天和大家分享的接口

    测试用CGI,名字为test.py,放在apache的cgi-bin目录下:#。/usr/bin/Pythonimport cgidef main():print "Content-type: text/html\n"form = cgi.FieldStorage()if form.has_key("ServiceCode") and form["ServiceCode"].value 。= "":print " Hello

    python 前后端进行交互 需要用到接口吗其实我就行知道 接口是什么? 不需要抽象 就大白话说一下

    当然要,一般是用ajax做的。 接口就是,前端按照一定格式给后端发请CSS布局HTML小编今天和大家分享数据。后端根据请CSS布局HTML小编今天和大家分享数据进行处理,返回给前端响应数据。

    ...与 Python 作为后端服务的编程语言各有什么优劣?

    Node.js相优于Python的地方: 快:这个快有两方面,第一是V8引擎快,第二是异步执行,Node.js 功能上是一个基于V8引擎的异步网络和IO Library,和Python的Twisted很像,不同的是Node.js的event loop是很底层的深入在语言中的。

    写后端 Python,nodejs和php哪个更好一些

    Node.js相优于Python的地方:快:这个快有两方面,第一是V8引擎快,第二是异步执行,Node.js功能上是一个基于V8引擎的异步网络和IOLibrary,和Python的Twisted很像,不同的是Node.js的eventloop是很底层的深入在语言中的。

    Node.js 与 Python 作为后端服务的编程语言各有什Node.js > Python 的地方 快:这个快有两方面,第一是V8引擎快,在V8引擎背后操刀的是Lars Bak大神,他创造过高性能SmallTalk引擎和Java Hotspot引擎(现在Java的默认VM),他带领下的V8引擎让Javascript速度达到了一个新的阶段。

    如何用python开发移动App后台

    使用python开发APP后台要用到tornado框架,因为非阻塞io的原因,性能非常高,特别适合写后端API(App的后端应该都是rest风格的api),而且成熟稳定。

    APP后台需要部署服务器,这方面涉及到运维、测试、开发诸多方面。

    python爬虫怎样接收后端接口并向后端传送数据python爬虫获取指定输入可以用正则表达式匹配指定内容,用re模块,用scrapy框架的话,可以用xpath来匹配。

    python是用于前端还是后端开发

    欢迎来到CSS布局HTML,Python属于后端,学习Python编程语言,是大家走入编程世界的最理想选择。你可以到我们官网进行观看下载。Python比其它编程语言更适合人工智能这个领域,无论是学习任何一门语言,基础知识,就是基础功非常的重要。

    属于后端开发。 Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

    展开全文
  • 后端:后端api

    2021-02-09 17:55:04
    后端:后端api
  • 后端API BEdita BEdita 4是随时可以使用的后端API,用于处理您的移动,IoT,Web和桌面应用程序的数据。 它也是一个可扩展的框架,用于通过插件构建自定义的后端API。 它提供了完整的内容管理解决方案,其中包括: ...
  • 后端API工作坊

    2021-02-26 03:59:12
    后端API工作坊-变革中的障碍 ICS学生会x提交更改 讲习班的先决条件 不需要注册 MongoDB指南针(〜140 MB) 目标 概念 蜜蜂 GET / POST / DELETE HTTP请求 HTTP代码 JSON格式 基于文档的NoSQL 环境变量 科技类 节点...
  • Fin is an open source backend API to track personal finances, made with Go
  • 前端神话的NFP后端API 安装与运行 npm install node --harmony index.js # ## Alts for running in production mode # node --harmoney index.js --production # NODE_ENV=production node --harmony index.js 在...
  • 如何优雅地写后端API接口

    万次阅读 多人点赞 2020-12-23 15:14:42
    在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式。前后端的工作职责越来越...针对URL路径的restful风格,以及传入参数的公共请求头的要求(如:app_version,api_versio

    在移动互联网,分布式、微服务盛行的今天,现在项目绝大部分都采用的微服务框架,前后端分离方式。前后端的工作职责越来越明确,现在的前端都称之为大前端,技术栈以及生态圈都已经非常成熟;以前后端人员瞧不起前端人员,那现在后端人员要重新认识一下前端,前端已经很成体系了

    1.接口交互

    前端和后端进行交互,前端按照约定请求URL路径,并传入相关参数,后端服务器接收请求,进行业务处理,返回数据给前端。

    针对URL路径的restful风格,以及传入参数的公共请求头的要求(如:app_version,api_version,device等),这里就不介绍了,小伙伴们可以自行去了解,也比较简单。

    着重介绍一下后端服务器如何实现把数据返回给前端?

    2.返回格式

    后端返回给前端我们采用json格式

    {
      "success": boolean,
      "code": int,
      "data": object,
      "msg": string
    }
    • success是否成功

    最简单的判断,前端直接取该值判断是否操作成功,成功为true,失败为false

    • code状态码

    当一个操作会因为多种因素失败的情况下,每种失败的原因进行设置不同的状态码。可以按照业务区分,例如用户的错误状态码在101-199之间,系统的错误状态码在201-299之间,可以按照自己的业务进行设置,我们参考下http状态码:

    200 - 请求成功
    301 - 资源(网页等)被永久转移到其它URL
    404 - 请求的资源(网页等)不存在
    500 - 内部服务器错误
    • data数据

    这里是具体要返回的数据,数据格式可以为数组、对象、字符串等格式

    • msg消息

    这个字段相对理解比较简单,就是发生错误时,如何友好的进行提示。一般的设计是和code状态码一起设计。如登陆失败> code:203,msg:登陆失败,账号或者密码有误

    2.1.返回样例

    这就是一个操作成功返回的例子

    {
      "success": true,
      "code": 1,
      "data": {"k": "v"},
      "msg": "操作成功"
    }

    3.实现

    3.1.定义状态码枚举类

    package com.niu.demo.util;
    
    /**
     * @description: 状态吗设置
     * @author: nxq email: niuxiangqian163@163.com
     * @createDate: 2020/12/21 7:46 下午
     * @updateUser: nxq email: niuxiangqian163@163.com
     * @updateDate: 2020/12/21 7:46 下午
     * @updateRemark:
     * @version: 1.0
     **/
    public enum ResultCode {
    	/* 通用状态码 成功与失败 */
    	SUCCESS(1,"ok"), FAILED(-1,"操作失败"),
    	/* 参数错误  101 - 199*/
    	PARAM_IS_INVALID(101,"参数无效"),
    	PARAM_IS_BLANK(101,"参数为空"),
    	/* 用户错误  201 - 299  */
    	USER_NOT_LOGIN(201,"未登录"),
    	USER_NOT_EXIST(202,"用户不存在"),
    	USER_LOGIN_ERROR(203,"登陆失败,账号或者密码有误"),
    	NOT_PERMISSION(204,"无权限访问"),
    	/* 业务错误 301 - 399*/
    	DATA_NOT_FOUND(301,"没有数据"),
    	//.......更多
    	;
    	private Integer code;
    	private String msg;
    
    
    	ResultCode(Integer code, String msg) {
    		this.code=code;
    		this.msg=msg;
    	}
    
    	public Integer getCode() {
    		return code;
    	}
    
    	public String getMsg(){
    		return msg;
    	}
    }
    

    3.2.创建返回结果类

    package com.niu.demo.util.core;
    
    import com.niu.demo.util.ResultCode;
    import java.io.Serializable;
    
    /**
     * @description: 响应类
     * @author: nxq email: niuxiangqian163@163.com
     * @createDate: 2020/12/21 7:37 下午
     * @updateUser: nxq email: niuxiangqian163@163.com
     * @updateDate: 2020/12/21 7:37 下午
     * @updateRemark:
     * @version: 1.0
     **/
    public class R<T> implements Serializable {
    
        private static final long serialVersionUID = 1L;
        private int code;  //状态码
        private boolean success; //是否成功
        private String msg; //提示信息
        private T data; //数据
    
        public static <T> R<T> ok() {
            return restResult(null, ResultCode.SUCCESS.getCode(),  ResultCode.SUCCESS.getMsg());
        }
    
        public static <T> R<T> ok(T data) {
            return restResult(data, ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMsg());
        }
    
        public static <T> R<T> ok(T data, String msg) {
            return restResult(data, ResultCode.SUCCESS.getCode(), msg);
        }
    
        public static <T> R<T> failed() {
            return restResult(null, ResultCode.FAILED.getCode(), ResultCode.FAILED.getMsg());
        }
        public static <T> R<T> failed(String msg) {
            return restResult(null, ResultCode.FAILED.getCode(), msg);
        }
    
        public static <T> R<T> failed(ResultCode resultCode) {
            return restResult(null, resultCode.getCode(), resultCode.getMsg());
        }
        public static <T> R<T> failed(Integer code,String msg) {
            return restResult(null, code, msg);
        }
    
        public static <T> R<T> failed(T data) {
            return restResult(data, ResultCode.FAILED.getCode(), ResultCode.SUCCESS.getMsg());
        }
    
        public static <T> R<T> failed(T data, String msg) {
            return restResult(data, ResultCode.FAILED.getCode(), msg);
        }
    
        public int getCode() {
            return code;
        }
    
        public void setCode(int code) {
            this.code = code;
        }
    
        public boolean isSuccess() {
            return success;
        }
    
        public void setSuccess(boolean success) {
            this.success = success;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
    
        private static <T> R<T> restResult(T data, int code, String msg) {
            R<T> apiResult = new R<>();
            apiResult.setCode(code);
            apiResult.setSuccess(code == 1);
            apiResult.setData(data);
            apiResult.setMsg(msg);
            return apiResult;
        }
    
    
    }
    

    3.3.在控制器中使用

    @RequestMapping
    @RestController
    public class DemoController {
    
        @GetMapping("/test1")
        public R<Object> test1(){
            return R.ok();
        }
    
        @GetMapping("/test2")
        public R<String> test2(){
            return R.ok("uuid");
        }
    
        @GetMapping("/test3")
        public R<List<String>> test3(){
            List<String> list = new ArrayList<>();
            return R.ok(list);
        }
    
        @GetMapping("/test4")
        public R<Object> test4(){
            return R.failed();
        }
    
        @GetMapping("/test5")
        public R<Object> test5(){
            return R.failed("暂时不能进行修改");
        }
    
        @GetMapping("/test6")
        public R<Object> test6(){
            return R.failed(ResultCode.USER_LOGIN_ERROR);
        }
        
        @GetMapping("/test7")
        public R<Object> test7(){
            return R.failed(500,"内部错误,请联系管理员");
        }
    }
    

    4.补充

    这个方案还有没有别的优化空间,当然是有的。例如:每个接口都要返回下R这个类,其实最主要的数据还是R的data数据对象,可以优化一下只返回数据对象,在拦截器里再包装一下数据对象。

    如果大家有更好的方式可以在评论区交流一下

     

    展开全文
  • PEBA:Python EWS后端API

    2021-01-31 08:02:55
    PEBA-Python EWS后端API 介绍: PEBA是一种轻量级的python3后端服务,用于收集和处理由honyeypot守护程序捕获的攻击事件,特别是那些在我们的多蜜罐平台上运行的事件。 PEBA可以用作分布式T-Pot安装的集中数据收集...
  • 这是用于后端api。 之前 确保首先拥有Nodejs,然后再运行: $ yarn或$ npm install 安装依赖项。 生产 在启动api之前,您应该首先通过以下方式构建api: $ yarn tsc或$ npm tsc 要以生产模式启动api,请运行 $ ...
  • 后端API-池中的鲨鱼 服务旨在分析./config/main中指定的合同的事件。 它将解析来自./config/contract_included_block的事件,并自动添加由主合同创建的其他合同。 它每30秒对合约表中存储的每个合约解析一次事件。...
  • 后端API的RCTrials平台v2.0.0 设置 堆栈基于Linux,因此从Linux或Mac运行更容易,但是,如果在Windows上运行,则推荐的方法是使用PowerShell。 主机应有权访问Docker,PHP和Composer。 这些工具用于运行部署前脚本...
  • 1.打开项目工程,找到config文件夹下index.js,... target: 'http://www.baidu.com',//后端api地址 changeOrigin: true, pathRewrite:{ '^api': '' } } }, 2.然后打开src下App.vue文件配置默认前缀 export defaul
  • 向您的后端API发出自定义请求的服务。 该服务同时使用和来构建URL。 因此,无需手动创建可能指向后端上的模型端点之一的请求URL,您可以传递模型名称或实例,此服务将为您生成正确的URL前缀。 这样,您可以轻松地...
  • 支持贸易救济服务的后端API。 代码风格 Live Services团队使用进行python代码格式化,并使用进行代码分析。 发展 设置 首先,您应该将local.env.example复制到local.env,并为本地开发环境添加必要的环境变量。 ...
  • Devcamper:后端API

    2021-05-21 04:24:35
    Devcamper应用程序的后端Api,这是一个Bootcamp目录网站 用法 将“ config / config.env.env”重命名为“ config / config.env”,并将设置/值更新为您自己的 安装依赖项 npm install 运行应用 #run in developer...
  • Naia后端API Naia Proejct后端API ElasticSearch产品和服务 项目流程 Controllers - > Services - > Repositories - > Models 设置环境 cp env_exampl env.sh # changed ElasticSearch, index... # and apply the ...
  • RE:TERNAL RE:TERNAL是一个集中化的紫色团队... 此仓库包含Python(在FastAPI和Celery的帮助下)编写的后端API的部分内容。 组件安装 请访问 ,以获取所有组件的完整概述以及快速入门教程,以使所有组件正常运行。
  • Pttr 后端 API 层 Pttr 的后端 API 层服务,供内部和开源使用。 后端 API 层试图将所有当前的遗留 API 系统以及各种收容所和流浪动物的一般数据统一在一个系统且统一的 JSON API 层下。 这个后端 API 层: 为 Pttr...
  • 如何使用 Python 编写后端 API 接口get APIPython3# coding:utf-8import json# ModuleNotFoundError: No module named 'url', 模块导入错误 ❌from url.parse import parse_qsfrom wsgiref.simple_server import ...
  • 这个一个模拟后端api数据交互的模块。 ##安装 npm install back-mock ##使用 新建一个文件(假如命名为mock.js)。在里面写入如下代码。 var mockServer = require("back-mock"); var path = require("path"); mock...
  • 后端API服务。 与Docker一起运行(推荐) 安装 克隆仓库 git clone https://github.com/messiah-hoodat/hoodat-api.git 将所需的环境变量添加到.env (向Eric询问变量) 建立形象 cd hoodat-api docker build -t ...
  • API管理平台 生成API文档的网站 API接口文档管理工具 公司搭建自己的后端API接口文档管理系统网站,用户权限admin,admin123
  • 用于store_frontend项目的后端API 在index.js中,您需要配置数据库和管理员角色。 手动更新数据库以获取用户的管理员角色。 需要在Front App应用程序项目部分( )中配置此api后端项目的地址和端口,文件位于:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 282,675
精华内容 113,070
关键字:

后端api