U816 API调用超时问题,第1张

超时时间间隔设置过小。

API提供者即服务器端的超时时间间隔设置过小,导致API的调用者发起的请求,还没来得及在服务器端被执行完毕就被丢弃了,这种情况需要增加服务器端的超时时间。

如果发现调一个接口超时,排查方法,遍历集合,把需要对比的字段和需要更新的字段放入一个hashMap中,需要对比的字段为key、需要更新的字段为value,把调接口的方法提到for循环外。

1如果想快速开发,没有自己的服务器,还是推荐使用云API的数据云。

2不使用云API的数据云,可能是因为有web版且已经有商用数据。

3不使用云API的数据云,需自己写数据接口,即客户端发送请求接收处理与生成json数据给客户端进行交互。

4感谢APICloud提供新的APP开发方式。

其实也不难,使用apiajax进行请求即可。PHPer,以下使用演示使用PHP,数据库使用Mysql,JAVA党或者NET党请自行coding

[连接到数据库(文件放在服务器上),服务器端输出JSON]

<php

/

配置连接数据库信息

/

$host='localhost';//主机

$user='root';//数据库账号

$password='';//数据库密码

$database='test';//数据库名

//打开数据库连接

$db=mysqli_connect($host,$user,$password,$database);

//判断连接是否成功

if($db){

$db->query("set names utf8");//设置UTF-8编码(JSON的唯一编码)

}else{

echo 'DATABASE_CONNECTION_DIE';//数据库连接失败

exit;

}

//sql查询语句

$sql="select id,name,sex,age from person";

$result=$db->query($sql);

while($row=$result->fetch_assoc()){

$person_info[]=$row;//将取得的所有数据赋值给person_info数组

}

echo json_encode($person_info);//输出JSON

>

复制代码

输出的JSON示例:

[{"id":"1","name":"\u54c8\u5c3c","sex":"\u7537","age":"22"},{"id":"2","name":"\u5c0f\u9648","sex":"\u5973","age":"21"},{"id":"3","name":"\u5c0f\u767d","sex":"\u672a\u77e5","age":"1"}]

复制代码

[测试用的数据库SQL语句]

--

-- Database: `test`

--

-- --------------------------------------------------------

--

-- 表的结构 `person`

--

CREATE TABLE IF NOT EXISTS `person` (

`id` int(11) NOT NULL,

`name` varchar(5) NOT NULL,

`sex` varchar(2) NOT NULL,

`age` int(3) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--

-- 转存表中的数据 `person`

--

INSERT INTO `person` (`id`, `name`, `sex`, `age`) VALUES

(1, '哈尼', '男', 22),

(2, '小陈', '女', 21),

(3, '小白', '未知', 1);

复制代码

搞定服务器端输出JSON后,重点来了

[端API使用apiajax读取接口数据]

<!DOCTYPE HTML>

<html>

<head>

<meta charset="utf-8">

<meta name="viewport"

content="maximum-scale=10,minimum-scale=10,user-scalable=0,width=device-width,initial-scale=10"/>

<title>test</title>

</head>

<body>

<button onclick="showPersonInfo()">点我获取数据</button>

</body>

<script type="text/javascript" src="/script/apijs"></script>

<script>

function showPersonInfo(){

apishowProgress();//显示加载进度框

//使用apiajax请求数据,具体使用方法和参数请看官方文档,这里使用get方法演示

apiajax({

url:'http://192168010/getphp',//如果地址访问不到会请求出错,请填写自己的接口地址

method:'get',

cache:'false',

timeout:30,

dataTpye:'json',

},function(ret,err){

apihideProgress();//隐藏加载进度框

if(ret){

for(var i=0;i<retlength;i++){

var

html='<br>'+'ID:'+ret[i]id+'<br>'+'姓名:'+ret[i]name+'<

br>'+'性别:'+ret[i]sex+'<br>'+'年龄'+ret[i]age;

documentwrite(html);

}

}else{

apialert({msg:('错误码:'+errcode+';错误信息:'+errmsg+'网络状态码:'+errstatusCode)});

}

});

}

</script>

</html>

一、创建和发布Web

Service

Web服务方法中可以返回一个DataSet对象

WEB服务可以说是下一代WEB应用程序的基础,无论客户端是WINDOWS应用、ASPNET Web

Form程序、甚至其他语言的客户端,都可以与同一个WEB服务通信,其平台和语言无关性使其有了广阔的发展空间。

利用VS2005和IIS我们可以很容易地发布一个WEB

SERVICE,因为其中有几个细节需要注意,所在初学者常常在这里出现问题,现通过一个简单的例子说明如何创建和发布一个WEB SERVICE。

环境:Windows Server 2003,Net FrameWork 20,IIS60

工具:VS2005

1首先VS2005中新建一个WEB服务项目。

打开“文件”-“新建”-“网站”,在对话框中选择“ASPNET Web服务”,VS2005会自动生成一个Servicecs文件,包含如下代码:

using System;

using SystemWeb;

using SystemWebServices;

using SystemWebServicesProtocols;

[WebService(Namespace = "http://tempuriorg/")]

[WebServiceBinding(ConformsTo = WsiProfilesBasicProfile1_1)]

public class Service

:

SystemWebServicesWebService

{

public Service

()

{

//如果使用设计的组件,请取消注释以下行

//InitializeComponent();

}

[WebMethod]

public string HelloWorld()

{

return "Hello

World";

}

}

你可以在这里修改自己的命名空间,加入自己的方法,但本文只是为了说明如何创建和发布,所以对Servicecs不做任何更改。

2生成网站

很简单,“生成”-“生成网站”或直接Shift+F6

3发布网站

也是简单,“生成”-“发布网站”,这里会弹出一个对话框,什么也不需要修改,记下发布的目录。比如:D:/我的文档/Visual Studio

2005/Projects/WebSite1/PrecompiledWeb/WebSite1,我们需要目录下的文件。

4配置IIS

你的WEB目录下一个文件夹,比如webservice,并将第3步发布目录中的所有文件和目录拷贝到这个目录中,打开IIS,找到你的站点,在这个webservice目录上点右键,选择属性,在弹出对话框的“目录”选择项卡中点击“创建”按钮,然后确定即可。

到这时,已经大功告成,你可以通过访问http://域名/webservice/Serviceasmx来验证。页面会出现如下图所示内容:

注意:除了需要在IIS中对服务目录创建程序外,还要注意防火墙或杀毒软件的设置,我在首次访问serviceasmx文件时,杀毒软件报告w3wpexe在系统文件夹中生成asp_codedll等,应该允许其他创建,否则会无法访问。

通过这样简单的方法,你可以轻松建立自己的WEB服务,在同一站点还可以有多个WEB服务。

二、c#的winform中调用Web Service

API(VB60也可以调用该web服务)

现在以C# WinForm为例谈谈如何使用它

,在服务中我们只有一个自动生成的方法:HelloWord(),其实现如下:

[WebMethod]

public string HelloWorld(){

return "Hello

World";

}

在WINFORM中我们将添加一个按钮,添加单击事件,在事件处理函数中弹出一个对话框显示HelloWord的结果。

1添加WEB引用

在VS2005中新建一个Windows应用程序项目,取名testwebservice,在项目中添加一个WEB引用,可在“解决方案资源管理器”的项目名上点右键添加,在弹出对话框中的URL输入框中输入WEB服务器的路径:如http://你的域名/web服务务路径/serviceasmx,点击“前行”按钮后会搜索这个服务,并在右边报告找到的服务,并在左边显示serviceasmx页面,我们在WEB引用名输入框中输入一个名字,这个将做为程序中WEB服务的命名空间名,这里我们取名mywebservice。

2添加按钮单击事件

在Form中拖出一个Button按钮,双击单击事件处理方法,代码如下:

private void button1_Click(object sender,

EventArgs e)

{

mywebserviceService

ws = new testwebservicemywebserviceService();

MessageBoxShow (wsHelloWorld());

}

其中mywebserviceService ws = new

testwebservicemywebserviceService()是实例化一个WEB服务对象,wsHelloWorld()是调用WEB服务中的这个HelloWorld方法,其返回字符串将用MessageBoxShow()函数显示出来。

好了,最简单的一个调用WEB服务API的WinForm例子已经完成了,编译运行,单击按钮,将会弹出对话框显示“Hello World”信息。

重要的一点,在net的WEB服务API中,除了一般的数据类型外,还可以返回结构和DataSet对象,有了这一点,就可以构建我们大多数的数据库应用了。

好了,接下来的工作就是在WEB服务中添加你的API完成你的工作了。

转载仅供参考,版权属于原作者。祝你愉快,哦

使用JavaAPI的5个技巧    

不要自己去实现安全框架

几平每个人都知道避免去实现加密等算法。同样道理,你的应用的安全栈的其余部分也是一样,可能需要花费很大,得到的风险也很大。你很可能会犯一些错误。自1999年以来,已经有89373个CVE(公共漏洞和暴露)发布了。而其中公开的大部分的发现者都是那些非常聪明的人。

你可能认为处理一个简单的用例(例如验证用户的密码)是很简单的事情一你所做的一切只是比较一对字符串。这样想就错了。你需要验证密码的哈希值,审核尝试登录的次数,减少针对字典的攻击,这只是冰山一角。你最好的选择是使用现有的成熟的库或框架,例如Apache的Shiro或者SpringSecurity,让这些框架去处理各类复杂的安全问题。

2Use TLS,Always!永远使用TLS!

能让你的应用需要TLS(HTTPS/SSL)只需要简单的一行代码,所有人都应该这样做!如果使用Apache Shiro框架,只需要设置属性:[urls]/=ssl如果使用Spring Security,只需要在设置HttpSecurity时,简单调用一个方法即可。httprequiresChannel()anyRequest()requiresSecure(),在Spring Boot中,仅需设置一些属性,如下:serverport=8443 serversslkey-store=classpath:keystorejks serversslkey-store-password=secret serversslkey-password=another-secret。

3使用Spring Booti创建Web Service

Spring Boot:是Spring平台的一个简化,能让编写Spring应用变得很简单,例如能用很少的代码,编写《app应用中考虑的12个因素》一文中提到的观点。如果你还在使用建War包的方式编码,那么Spring Boot值得你去学习。使用Spring Booti可以复杂的、不同类型的应用,例如可以使用简单的注解。

(@EnableResourceServer))就搭建一个OAuth资源服务器,或者通过简单的属性改变其端口:serverport 8090如果不喜欢使用SpringBoot,那么可以使用Dropwizard去搭建JAX-RS技术栈。

4,监视应用和性能指标

如果无任何数据的情况下是很难发现程序的错误的。Spring Booti通过使用Actuator,能让收集指标数据变得容易,只需要在应用中增加一个依赖,如下:<dependency<groupld>orgspringframeworkboot</groupld>。

<artifactld>spring-boot-starter-actuator</artifactld>。

</dependency>。

然后就可以通过浏览器中,在访问应用地址后输入/health或者/metrics去检查应用的健康情况或者指标。Dropwizard框架通过healthcheck和/metrics实现同样的功能。

5保护敏感信息

人们都认为API密钥是不安全的,这是事实。密钥通过电子邮件发送或源代码管理系统控制。也许这是它们看起来比密码更不安全的原因,但它们也一样敏感。如果需要将AP川密钥存储在文件中,请确保授予文件有限的访问权限。

例如,我们建议在私人目录中存放Okta的YAML文件并且赋予文件所有者只读权限。chmod u=r,go-rwx ~/okta/oktayaml如果你正为使用你的APP的用户创建API,记得提醒他们,如果无设置好权限的话,SSH的忽文件是放在你的~/ssh目录下,如果无设置好权限的话。GitHub把它们放在“危险区域”,以提醒用户,这是十分有用的。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » U816 API调用超时问题

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情