U816 API调用超时问题
超时时间间隔设置过小。
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把它们放在“危险区域”,以提醒用户,这是十分有用的。
0条评论