❶ webapp开发需要什么软件(web开发和app开发哪个好)
介绍几个web开发需要的基础工具:
KendoUI:webAPP界面设计工具。KendoUI拥有统一测试,支撑框架下所需要的虚祥所有工具。使得专注于创建自己的应用程序,而不是从成百上千不支持的插件和库中创建(和支撑)框架。KendoUIWeb包括简单、一致的编程接口,安全可靠的数据源,精美和新颖的UI小部件,MVVM框架,主题和模板等。需要做的就是以KendoUIWeb为基础,去开发现代化、交互式的HTML5和JavaScript应用程序。
KendoUIWeb支持即时触屏功能。所有的KendoUIWeb小部件都全面支持触屏设备,如iPad、iPhone和Android,因此Web应用程序能用在许多不同输入选项的设备上。甚至KendoUI的拖拽框架都支持触摸屏,无需仅仅为了处理鼠标和触摸屏芹答输入而复制代码。
MOQUPS:这个工具可创建出非常惊人的webapp,具有高保真、独立分辨率的SVG模型和线框。Moqups是一款HTML5在线的WEB框架、模型、UI设计并创建的网络应用程序。基于HTML5在线WEB框架、模型、UI设计并创建:Moqups它内置有超过60套手绘的SVG模板及特性。
FluidUI:FluidUI是目前最快的移动app原型设计工具,它可以在移动设备上测试各种低保真和高保真的app模型
UXPin:UXPin是DeSmart团队开发的一个简易快速的实体模型和在线可点击原型创作工具。基于优秀的用户体验设计原则,在构建原型中,提供了一个完整的工具包(该工具包具有良好的用户设计模式和元素)来从头构建一个出色的原型。UXPin具有响应式的断点功能,创建的响应式原型和线框图可以运行差首搏在不同的设备和分辨率上。另外该软件还提供了版本控制和迭代功能,可以轻松的共享预览,直观的注解和实时的协同编辑和聊天。
❷ 想开发一个WEB应用程序,客户端访问程序来管理本地上的数据库读写操作。这个要通过什么技术来实现
写一个客户端程序,这个程序负责提供所有业务的api接口和访问数据库,挂载到任意端口port
假如web程序的域名是www.abc.com,那就应该在安装客户端时,在客户端的hosts文件里将clientapi.abc.com指向127.0.0.1,解决跨域访问的问题
web程序关于数据读写的操作,都直接访问client.abc.com:port的api接口
❸ 如何使用tp开发webapp
方案一:给原生APP提供api接口
使用TP框架时 放在common文件夹下文件名就叫function.php
<?php
/**
*Createdbyzhangkx
*Email:[email protected]
*Date:2015/8/1
*Time:23:15
*/
/******api开发辅助函数*******/
/**
*@paramnull$msg返回正确的提示信息
*@paramflagsuccessCURD操作成功
*@paramarray$data具体返回信息
*Functiondescript:返回带参数,标志信息,提示信息的json数组
*
*/
functionreturnApiSuccess($msg=null,$data=array()){
$result=array(
'flag'=>'Success',
'msg'=>$msg,
'data'=>$data
);
print<ahref="https://www..com/s?wd=json_encode&tn=44039180_cpr&fenlei=-yw9Uz4Bmy-bIi4WUvYETgN-"target="_blank"class="-highlight">json_encode</a>($result);
}
/**
*@paramnull$msg返回具体错误的提示信息
*@paramflagsuccessCURD操作失败
*Functiondescript:返回标志信息‘Error',和提示信息的json数组
*/
functionreturnApiError($msg=null){
$result=array(
'flag'=>'Error',
'msg'=>$msg,
);
print<ahref="https://www..com/s?wd=json_encode&tn=44039180_cpr&fenlei=-yw9Uz4Bmy-bIi4WUvYETgN-"target="_blank"class="-highlight">json_encode</a>($result);
}
/**
*@paramnull$msg返回具体错误的提示信息
*@paramflagsuccessCURD操作失败
*Functiondescript:返回标志信息‘Error',和提示信息,当前系统繁忙,请稍后重试;
*/
functionreturnApiErrorExample(){
$result=array(
'flag'=>'Error',
'msg'=>'当前系统繁忙,请稍后重试!',
);
print<ahref="https://www..com/s?wd=json_encode&tn=44039180_cpr&fenlei=-yw9Uz4Bmy-bIi4WUvYETgN-"target="_blank"class="-highlight">json_encode</a>($result);
}
/**
*@paramnull$data
*@returnarray|mixed|null
*Functiondescript:过滤post提交的参数;
*
*/
functioncheckDataPost($data=null){
if(!empty($data)){
$data=explode(',',$data);
foreach($dataas$k=>$v){
if((!isset($_POST[$k]))||(empty($_POST[$k]))){
if($_POST[$k]!==0&&$_POST[$k]!=='0'){
returnApiError($k.'值为空!');
}
}
}
unset($data);
$data=I('post.');
unset($data['_URL_'],$data['token']);
return$data;
}
}
/**
*@paramnull$data
*@returnarray|mixed|null
*Functiondescript:过滤get提交的参数;
*
*/
functioncheckDataGet($data=null){
if(!empty($data)){
$data=explode(',',$data);
foreach($dataas$k=>$v){
if((!isset($_GET[$k]))||(empty($_GET[$k]))){
if($_GET[$k]!==0&&$_GET[$k]!=='0'){
returnApiError($k.'值为空!');
}
}
}
unset($data);
$data=I('get.');
unset($data['_URL_'],$data['token']);
return$data;
}
}
查询单个果品详细信息
/**
*发布模块
*
*获取信息单个果品详细信息
*
*/
(){
//检查是否通过post方法得到数据
checkdataPost('id');
$where['id']=$_POST['id'];
$field[]='id,fruit_name,high_price,low_price,address,size,weight,fruit_pic,remark';
$releaseInfo=$this->release_obj->findRelease($where,$field);
$releaseInfo['remark']=<ahref="https://www..com/s?wd=mb_substr&tn=44039180_cpr&fenlei=-yw9Uz4Bmy-bIi4WUvYETgN-"target="_blank"class="-highlight">mb_substr</a>($releaseInfo['remark'],0,49,'utf-8').'...';
//多张图地址按逗号截取字符串,截取后如果存在空数组则需要过滤掉
$releaseInfo['fruit_pic']=<ahref="https://www..com/s?wd=array_filter&tn=44039180_cpr&fenlei=-yw9Uz4Bmy-bIi4WUvYETgN-"target="_blank"class="-highlight">array_filter</a>(explode(',',$releaseInfo['fruit_pic']));
$fruit_pic=$releaseInfo['fruit_pic'];unset($releaseInfo['fruit_pic']);
//为图片添加存储路径
foreach($fruit_picas$k=>$v){
$releaseInfo['fruit_pic'][]='http://'.$_SERVER['HTTP_HOST'].'/Uploads/Release/'.$v;
}
if($releaseInfo){
returnApiSuccess('',$releaseInfo);
}else{
returnApiError('什么也没查到(+_+)!');
}
}
findRelease()方法的model
/**
*查询一条数据
*/
publicfunctionfindRelease($where,$field){
if($where['status']==''||empty($where['status'])){
$where['status']=array('neq','9');
}
$result=$this->where($where)->field($field)->find();
return$result;
}
app端接收到的数据(解码json之后)
{
"flag":"success",
"message":"",
"responseList":{
"id":"2",
"fruit_name":"苹果",
"high_price":"8.0",
"low_price":"5.0",
"address":"天津小白楼水果市场",
"size":"2.0",
"weight":"2.0",
"remark":"急需...",
"fruit_pic":[
"http://fruit.txunda.com/Uploads/Release/201508/55599e7514815.png",
"http://fruit.txunda.com/Uploads/Release/201508/554f2dc45b526.jpg"
]
}
}
app端接收到的数据(原生json串)
代码如下:
{"flag":"success","message":"","responseList":{"id":"2","fruit_name":"u82f9u679c","high_price":"8.0","low_price":"5.0","address":"","size":"2.0","weight":"2.0","remark":"u6025u9700...","fruit_pic":["http://fruit.txunda.com/Uploads/Release/201508/55599e7514815.png","http://fruit.txunda.com/Uploads/Release/201508/554f2dc45b526.jpg"]}}