api接口

高并发系统设计之开放平台API接口调用频率控制系统

两盒软妹~` 提交于 2019-12-07 12:27:49
先描述下基本场景: 系统API接口日均调用次数预计1亿次,提供5台服务器。 需要做两种层面的控制: > 单IP、单应用每小时调用次数不超过10000次 > 单应用、单用户、单接口每小时调用次数不超过1000次 要求每次对频控系统的调用的响应时间在20ms内。 此外,应用开发者和开放平台所属公司关心调用次数统计数据,如当天某应用所有接口被调用总次数、当天某应用某接口被调用次数、当天某应用用户使用数等。 根据上面,我们可以直接得到系统响应度要求和计算得到系统吞吐量要求,计算公式如下: 1 2 频控系统吞吐量(系统每秒能够处理的请求数) = 80% * 1亿 / (24小时 * 60分钟 * 60秒 * 40% * 5) = 4630tps 80%、40%是指一天中有80%的请求发生在40%的时间内,是粗略的估算值。5是服务器数量。所以得到吞吐量要求为4630tps。前期设计系统时必须参考 这些性能指标 ,后期压测系统时必须根据这些指标设计测试计划。 总结下系统设计需要达成的目标: 请求的响应足够快 能支撑4630tps 占用的CPU、内存等硬件资源不能太夸张(隐性设计目标) A、数据结构设计 计数是典型的key-value数据结构。 可能想到的最简单最自然的方式是下面这样的: 1 2 K(app_id, ip) => V(count, startTime, lastTime) K

RESTful API 实践

删除回忆录丶 提交于 2019-12-07 06:43:26
欢迎访问陈同学 博客原文 猪齿鱼 REST API 规范 本文记录了 RESTful API 的一些实践经验,内容综合了部分 后端圈.研习小组 关于 REST 的探讨结果,仅简单带一下理论知识,更多可参考: Roy Thomas Fielding 2000年的 博士论文 中 Chapter 5: Representational State Transfer (REST) 阮一峰:理解 RESTful 架构 简介 REST 是 Representational State Transfer 首字母缩写,翻译为 表现层状态转化 ,加上主语 资源 ,应为: 资源通过表现层进行状态转化 。 例如:服务端提供接口查询单个用户,返回数据格式可以是:JSON、XML、文本、HTML等,这就是资源的表现形式。客户端通过HTTP(HTTPS)协议传递某种格式(表现层)的数据给服务端来完成对资源的状态变更。 技术团队理解并统一遵循 RESTful 接口的规范,可避免杂乱的接口定义,使得接口顾名思义,提高效率。 接口组成 接口由HTTP动词、域名、版本、Endpoint组成。 GET https://example.com/api/v1/users Endpoint Endpoint 在 RESTful 中理解为资源,使用复数名词来命名。例如:用户 users。 版本 表示接口版本号,可直接放入URL

在Java程序中调用Salesforce REST API

大城市里の小女人 提交于 2019-12-07 06:36:45
Salesforce 提供多种不同的REST API接口以支持客户应用的开发,本文介绍如何在Java程序中使用Apache HttpComponents调用Salesforce REST API。 第一步: 登录Salesforce 首先设置包括Salesforce登录主机和 登录接口URL, 并初始化一个Post请求。 HttpHost target = new HttpHost("login.salesforce.com", 443, "https"); String loginURL= "/services/Soap/u/29.0"; HttpPost loginPost = new HttpPost(loginURL); 然后设置Post头信息 loginPost.setHeader("content-type", "text/xml"); loginPost.setHeader("charset", "UTF-8"); loginPost.setHeader("SOAPAction", "login"); 其后发送一个Post登录请求并接受其响应。 String loginRequestXMLTemplate = "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n" + "<env:Envelope\n" + "xmlns:xsd

注解@CrossOrigin解决跨域问题

本秂侑毒 提交于 2019-12-06 23:12:38
阅读目录: 一、跨域(CORS)支持: 二、使用方法: 1、controller配置CORS 2、全局CORS配置 3、XML命名空间 4、How does it work? 5、基于过滤器的CORS支持 三、spring注解@CrossOrigin不起作用的原因 四、参考文章: 阅读正文: 原文链接: https://www.mmzsblog.cn/articles/2019/08/23/1566526598886.html 注解@CrossOrigin   出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源。例如,当你在一个标签中检查你的银行账户时,你可以在另一个选项卡上拥有EVILL网站。来自EVILL的脚本不能够对你的银行API做出Ajax请求(从你的帐户中取出钱!)使用您的凭据。   跨源资源共享(CORS)是由大多数浏览器实现的W3C规范,允许您灵活地指定什么样的跨域请求被授权,而不是使用一些不太安全和不太强大的策略,如IFRAME或JSONP。 回到顶部 一、跨域(CORS)支持:   Spring Framework 4.2 GA为CORS提供了第一类支持,使您比通常的基于过滤器的解决方案更容易和更强大地配置它。所以springMVC的版本要在4.2或以上版本才支持@CrossOrigin 回到顶部 二、使用方法: 1、controller配置CORS 1

经纬度转换地图坐标api示例代码

試著忘記壹切 提交于 2019-12-06 20:56:31
经纬度转换地图坐标api支持百度、谷歌、GPS三大经纬度互相转化。 基于 php 的 经纬度转换地图坐标 api 调用代码实例 <!--?php // +---------------------------------------------------------------------- // | JuhePHP [ NO ZUO NO DIE ] // +---------------------------------------------------------------------- // | Copyright (c) 2010-2015 http://juhe.cn All rights reserved. // +---------------------------------------------------------------------- // | Author: Juhedata <info@juhe.cn--> // +---------------------------------------------------------------------- //---------------------------------- // 地图坐标服务调用示例代码 - 聚合数据 // 在线接口文档:http://www.juhe.cn

HTML5 Geolocation API和Google Maps API结合实现路线导航

百般思念 提交于 2019-12-06 16:52:42
HTML5提供了地理位置定位功能(Geolocation API),能确定用户位置,我们可以借助HTML5的该特性开发基于地理位置信息的应用。本文结合实例给大家分享如何使用HTML5,借助百度、谷歌地图接口来获取用户准确的地理位置信息。 定位功能(Geolocation)是HTML5的新特性,因此只有在支持HTML5的现代浏览器上运行,特别是手持设备如iphone,地理定位更加精确。首先我们要检测用户设备浏览器是否支持地理定位,如果支持则获取地理信息。注意这个特性可能侵犯用户的隐私,除非用户同意,否则用户位置信息是不可用的,所以我们在访问该应用时会提示是否允许地理定位,我们当然选择允许即可。 function getLocation(){ if (navigator.geolocation){ navigator.geolocation.getCurrentPosition(showPosition,showError) }else{ alert("浏览器不支持地理定位。") } } 上面的代码可以知道,如果用户设备支持地理定位,则运行 getCurrentPosition() 方法。如果getCurrentPosition()运行成功,则向参数showPosition中规定的函数返回一个coordinates对象,getCurrentPosition()

Bootstrap, 模态框实现值传递,自动勾选

心已入冬 提交于 2019-12-06 16:51:47
目录 Bootstrap,模态框自动勾选,值传递 1.父页面 2. 子页面(modal) 模态框 Bootstrap,模态框自动勾选,值传递 场景: ​ 有一个这样的需求, 在父页面有一个table, 在table中有每一行都有一个更新按钮, 用来更新此行数据关联的另一组完整数据, 在点击按钮时, 直接弹出新的table, 并且需要将默认已经关联的数据进行勾选处理. 如下所示. 1.父页面 效果 图一为父页面 domain_list : 展示某列表信息,其中 绑定主机 是涉及调用 子页面的 btn 此页面代码如下, (后端主要使用了python, Django, 使用了模板语言. 这里不是重点) {% extends '_base_list.html' %} {% load i18n static %} {% block custom_head_css_js %} <style> #domainSteps { padding-left: 7%; width: 35%; margin:10px auto; } .step-item { display: inline-block; line-height: 32px; position: relative; } .step-item-tail { width: 100%; padding: 0 10px; position:

【ASP.NET Core学习】Web API

烈酒焚心 提交于 2019-12-06 13:15:43
这里介绍在ASP.NET Core中使用Web API创建 RESTful 服务,本文使用VSCode + NET Core3.0 创建简单Rest API 格式化输出 JSON Patch请求 Open API(Swagger)集成 创建简单Rest API 在终端输入 dotnet new webapi -n WebAPI 1. 创建Order模型,然后初始化数据 static List<Models.Order> _orderStore = new List<Models.Order>(); static OrderController() { var random = new Random(); foreach (var item in Enumerable.Range(1, 10)) { _orderStore.Add(new Models.Order { Id = item, OrderNo = DateTime.Now.AddSeconds(random.Next(100, 200)).AddMilliseconds(random.Next(20, 50)).Ticks.ToString(), Quantity = random.Next(1, 10), Amount = Math.Round(((decimal)random.Next(100, 500) /

drf之接口规范

馋奶兔 提交于 2019-12-06 10:56:02
web接口 # 请求工具:postman => https://www.getpostman.com/ # 接口:url链接,通过向链接发生不同的类型请求与数据得到相应的响应数据 # http://127.0.0.1:8888/test/ # https://api.map.baidu.com/place/v2/search RESTful规范 # REST: 表征性状态转移(Representational State Transfer) # RESTful规范:web数据请求接口设计规范 ''' 1)通常使用https请求 2)域名:有api关键字出现 -- https://api.example.com (存在跨域问题) -- https://example.com/api 3)版本:不同版本需要标注 -- https://example.com/api/v1 | -- https://example.com/api/1 -- https://example.com/api/v2 | -- https://example.com/api/2 4)资源:请求的目标数据称之为资源,资源一般都有名词复数表示 -- https://example.com/api/v1/books (之前不规范的案例: /get_books/) 5)操作方式:不从请求链接体现操作方式

Vue+axios统一接口管理

僤鯓⒐⒋嵵緔 提交于 2019-12-06 10:08:30
Vue+axios统一接口管理 通过axios请求接口已经很简单了,但最近在做一个vue项目,想着把axios请求再封装一下,这样api就可以只在一处配置成方法,在使用的时候直接调用这个方法。 但咱们不用每个接口都定义成一个啰嗦的axios请求方法,既然是想简单点,就尽量只在一处完成简单的配置。 1、配置api接口 将同一模块的接口放在一个文件下,比如我在src的services下定义了一个global.js作为全局服务的配置,在它里面配置的api可以作为这个服务的方法。 比如: name字段将作为之后被调用的方法名,但这个只是一个单纯的对象,现在我们定义方法将它转为方法。 2、将接口配置的数组对象转化为方法 import axios from "axios"; const withAxios = apiConfig => { const serviceMap = {}; apiConfig.map(({ name, url, method }) => { serviceMap[name] = async function(data = {}) { let key = "params"; if (method === "post" || method === "put") { key = "data"; } return axios({ method, url: "/api" +