自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

天笑的博客

技术笔记,学习心得

  • 博客(67)
  • 资源 (1)
  • 收藏
  • 关注

原创 筋斗云接口编程

随着移动互联网的快速发展,各行业对手机应用开发需求旺盛。 应用开发一般分为前端和后端,后端关注数据和业务,需要对前端各类应用(如安卓应用、苹果应用、H5应用等)提供基于HTTP协议的交互接口。筋斗云是一个Web接口开发框架,它不讲MVC,不做对象-数据表映射(OR Mapping),而是以数据表为核心来开发Web Service(也称为Web API),提出极简化开发的“数据模型即接口”思想。

2017-02-23 16:49:09 2359 6

原创 变脸式应用

[序]本书将以实战练习和示例分析为主,给读者展现用H5技术制作手机应用的开发体验。筋斗云前端框架(jdcloud-m)是一个变脸式单网页应用的开源开发框架,它以页面路由和接口调用为核心,提供多逻辑页支持和远程接口调用封装,同时对制作安卓、苹果原生应用也提供良好的支持,因而也是一个全平台H5应用框架。本书就以该开发框架为基础,讲解手机应用开发中常见需求的解决方案。

2017-02-06 13:23:26 1938 3

转载 收发货太多,搞不清库存怎么办

手机巨头华为以往Mate 30、Mate 40系列热卖、出货量均超千万,9月初华为即将发布Mate 50手机,将再次迎来一波热潮,如何保生产保供应,其内部的仓库管理流程和WMS系统着实立下了汗马功劳。

2022-08-31 14:14:07 182

原创 PingTunnel(ptunnel)源码分析与性能改进

这里写自定义目录标题PingTunnel(ptunnel)源码分析与性能改进主要问题问题1:ACK包响应太慢及发包太快导致传输受限解决方法问题2:发送方CPU 100%问题解决方案问题3:连接有时会挂掉解决方案未来的改进展望PingTunnel(ptunnel)源码分析与性能改进PingTunnel是用于内网穿透的工具,近期用到它,发现了不少问题,做了一些改进,记录于此。这个工具大概是2004年左右由Daniel创建,之后维护到2011年左右,支持通过ICMP或DNS(UDP)通道做隧道传输TCP报文

2021-08-20 14:06:50 874

原创 缺少这个思维,你很难成为大牛

我们常常遇到这样的场景,在项目A中开发了很多功能,这时在项目B中遇到要开发和A中类似的功能,这时会怎么做?很多人会不假思索的找到原来A项目中相关的功能代码,拷贝到B项目中,然后修改。 几乎人人都这么做过,这样做有些什么问题呢?首先,由于代码常常混杂在一起,并不那么容易拷贝。特别是当代码不是自己写的,往往会一下拷贝了过多的无关内容到新项目中。

2017-06-30 14:35:14 949 1

原创 使用jdcloud-wui筋斗云前端框架如何快速定位到源码

jdcloud-wui是筋斗云前端框架,使用模型驱动开发的思想,主要用于桌面管理端的快速开发。它主要由逻辑页和对话框作为模块化的开发单元构成,下面就是一个典型的逻辑页和一个对话框(右边部分是在chome中打开了F12调试窗口):当前显示的是个会员卡管理页面,并且显示了一个对话框。 要找到这个页面或对话框的源代码或源文件,有一个小技巧,可以在控制台中输入:WUI.getActivePage()就会

2017-05-26 10:18:51 1553

原创 筋斗云接口编程 / 会话管理

会话管理筋斗云使用cookie机制来维持与客户端的会话。 它默认使用的cookie名称是”userid”,但可以由客户端请求中URL参数_app来修改,比如_app=emp,则使用cookie名称为”empid”。 在筋斗云中,_app参数称为前端应用名,因而不同的应用即使同时在浏览器中打开也不会发生会话错乱和冲突。示例请求:GET /mysvc/api.php?_app=emp如果请求中没有

2017-03-21 12:04:43 568

原创 筋斗云接口编程 / 批量请求

批量请求筋斗云框架支持批量请求,即在一次请求中,包含多条接口调用。假设一个前端页面进入时,需要接连调用好多次接口才能完成展现,一般的做法是需要后端重新设计接口来优化。 筋斗云支持batch接口,这时后端不必做任何设计修改,前端只要调用batch接口即可获得优化。假如前端进入某页面,需要调用下面两个接口:获取用户信息User.get() -> {id, name, phone, ...}上传用户操

2017-03-21 12:04:12 575

原创 筋斗云接口编程 / 日志与调试

日志与调试输出日志可以用logit函数,将信息输出到后端文件中,默认存在服务目录下的trace.log文件中。logit("### debug info");除直接查看文件外,也可以在浏览器中访问 tool/log.php 页面来查看最近的日志。如果想输出到其它文件,可以在第二个参数中指定,如:logit("### debug info", "mydebug");这样调试信息则输出到mydebu

2017-03-21 12:03:19 573

原创 筋斗云接口编程 / 非标准对象接口

非标准对象接口对象的增删改查(add/set/get/query/del共5个)接口称为标准接口。 可以为对象增加其它非标准接口,例如取消订单接口:Ordr.cancel(id)应用逻辑- 权限: AUTH_USER- 用户只能操作自己的订单只要在相应的访问控制类中,添加名为api_{非标准接口名}的函数即可:class AC1_Ordr extends AccessControl{

2017-03-14 15:54:33 500

原创 筋斗云接口编程 / 接口返回前回调

接口返回前回调示例:添加订单到Ordr表时,自动添加一条”创建订单”日志到OrderLog表,可以这样实现:class AC1_Ordr extends AccessControl{ protected function onValidate() { if ($this->ac == "add") { ... $thi

2017-03-14 15:54:02 333

原创 筋斗云接口编程 / 虚拟表和视图

虚拟表和视图表ApiLog中有一个字段叫app,表示前端应用名:@ApiLog: id, tm, addr, app, userId- userId: 如果app=user,则关联到User表;如果app=emp,则关联到员工表Employee@Employee: id, name, phone, ...@User: id, ...当app=”emp”时,就表示是员工端应用的操作日志。 现在想

2017-03-14 15:53:30 487

原创 筋斗云接口编程 / 子表对象

子表对象前面提到过想在对象中返回子表时,可以使用压缩成一个字符串的子表字段,一般适合数据比较简单的场合。另一种方式是用$subobj来定义子表对象。例如在获取订单时,同时返回订单日志,设计接口如下:Ordr.get() -> {id, ..., @orderLog?}返回orderLog: {id, tm, dscr, action} 订单日志子表。示例{id: 1, dscr: "换轮胎及洗车"

2017-03-14 15:53:02 362

原创 筋斗云接口编程 / 虚拟字段(二)

计算字段在定义虚拟字段时,”res”也可以是一个计算值,或一个很复杂的子查询。例如表OrderItem是Ordr对象的一个子表,表示订单中每一项产品的名称、数量、价格:@Ordr: id, userId, status(2), amount, dscr(l)@OrderItem: id, orderId, name, qty, price一个订单对应多个产品项:OrderItem(orderId

2017-03-09 11:16:20 525

原创 筋斗云接口编程 / 虚拟字段

虚拟字段前面已经学习过怎样把一个数据库中的表作为对象暴露出去。 其中,表的字段就可直接映射为对象的属性。对于不在对象主表中定义的字段,统称为虚拟字段。通过$vcolDefs来定义虚拟字段,最简单的一类虚拟字段是字段别名,比如class AC1_Ordr extends AccessControl{ protected $vcolDefs = [ [ "res" => ["

2017-03-09 11:15:40 367

原创 筋斗云接口编程 / 分页机制

分页机制query操作默认支持分页(paging), 一般调用形式为Ordr.query(_pagekey?, _pagesz?=20) -> {nextkey?, total?, @h, @d}参数:- _pagesz: Integer. 页大小,默认为20条数据。- _pagekey: String (一般是数值). 首次查询不用填写(或填0),而下次查询时应根据上次调用时返回数据的"nex

2017-03-08 08:48:29 385

原创 筋斗云接口编程 / 对象型接口(四)

定制可访问数据除了限制用户可以访问哪些表和字段,还常会遇到一类需求是限制用户只能访问自己的数据。[任务]用户登录后,可以添加订单、查看自己的订单。 我们在设计文档中设计接口如下:添加订单Ordr.add()(amount) -> id查看订单Ordr.query() -> tbl(id, userId, status, amount)Ordr.get(id) -> { 同query接口字段.

2017-03-08 08:46:59 375

原创 筋斗云接口编程 / 对象型接口(三)

绑定访问控制类与权限前面在讲函数型接口时,提到权限检查用checkAuth函数来实现。 在对象型接口中,通过绑定访问控制类与权限,来实现不同角色通过不同的类来控制。比如前例中ApiLog对象接口允许员工登录(AUTH_EMP)后访问,只要定义:class AC2_ApiLog extends AccessControl{ ...}那么为什么AC2前缀对应员工权限呢? 在api.php

2017-03-08 08:46:11 391

原创 筋斗云接口编程 / 对象型接口(二)

定制操作类型和字段对象接口通过继承AccessControl类来实现,默认允许5个标准对象操作,可以改写属性$allowedAc来限定允许的操作:class AC_ApiLog extends AccessControl{ protected $allowedAc = ["get", "query"]; // 默认值为 ["add", "get", "set", "del", "q

2017-03-03 10:57:49 320

原创 筋斗云接口编程 / 对象型接口

对象型接口为了更好的理解之后章节的示例,我们先了解一下示例中用到的数据模型。[数据模型描述方式]下面是几个数据表,每个表都应有个作为主键的id字段,是可自动增长的整数类型,即使是关联表也应定义id字段作为主键。用户:@User: id, uname, phone(s), pwd, name(s), createTm订单:(用Ordr而不是Order词是避免与SQL关键字冲突。)@Ordr: id

2017-03-03 10:57:12 319

原创 筋斗云接口编程 / 常用操作(三)

数据库操作数据库连接一开始是通过tool/init.php在线配置的,或直接手改文件 php/conf.user.php 文件的相关配置如:putenv("P_DB=localhost/jdcloud");putenv("P_DBCRED=test:test123");如果想稍稍隐蔽一下登录账号,也可以用base64编码,如:putenv("P_DBCRED=ZGVtbzpkZW1vMTIz")

2017-03-02 08:38:26 548

原创 筋斗云接口编程 / 常用操作(二)

接口返回函数应返回符合接口原型中描述的对象,框架会将其转为最终的JSON字符串。比如登录接口要求返回{id, _isNew}:login(uname, pwd, _app?=user) -> {id, _isNew?}因而在api_login中,返回结构相符的对象即可:$ret = [ "id" => $id, "_isNew" => 1];return $ret;最终返回的

2017-03-02 08:38:00 471

原创 筋斗云接口编程 / 常用操作(一)

获取参数函数mparam用来取必传参数(m表示mandatory),参数既可以用URL参数,也可以用POST参数传递。如果是取一个可选参数,可以用param函数。 与直接用php的$_GET等变量相比,param/mparam可指定参数类型,如// 取id参数,特别地,对id参数会返回一个整数。$id = param("id"); // 请求参数为"id=3", 返回3, 不是字符串"3"//

2017-03-02 08:37:17 561

原创 筋斗云接口编程 / 函数型接口

如果不是典型的对象增删改查操作,可以设计函数型接口,比如登录、修改密码、上传文件这些。函数型接口一般实现在文件 php/api_functions.php 中,它被主文件api.php包含。 假设有以下接口定义:获取登录信息(who am i?)whoami() -> {id}应用逻辑- 权限:AUTH_USER (必须用户登录后才可用)我们使用模拟数据实现接口,函数名规范为api_{接口名}

2017-03-02 08:35:34 345

原创 筋斗云接口编程 / 函数型接口

如果不是典型的对象增删改查操作,可以设计函数型接口,比如登录、修改密码、上传文件这些。函数型接口一般实现在文件 php/api_functions.php 中,它被主文件api.php包含。 假设有以下接口定义:获取登录信息(who am i?)whoami() -> {id}应用逻辑- 权限:AUTH_USER (必须用户登录后才可用)我们使用模拟数据实现接口,函数名规范为api_{接口名}

2017-03-01 14:46:57 246

原创 筋斗云接口编程 / 函数型接口

如果不是典型的对象增删改查操作,可以设计函数型接口,比如登录、修改密码、上传文件这些。函数型接口一般实现在文件 php/api_functions.php 中,它被主文件api.php包含。 假设有以下接口定义:获取登录信息(who am i?)whoami() -> {id}应用逻辑- 权限:AUTH_USER (必须用户登录后才可用)我们使用模拟数据实现接口,函数名规范为api_{接口名}

2017-03-01 14:23:02 241

原创 筋斗云接口编程 / 函数型接口

如果不是典型的对象增删改查操作,可以设计函数型接口,比如登录、修改密码、上传文件这些。函数型接口一般实现在文件 php/api_functions.php 中,它被主文件api.php包含。 假设有以下接口定义:获取登录信息(who am i?)whoami() -> {id}应用逻辑- 权限:AUTH_USER (必须用户登录后才可用)我们使用模拟数据实现接口,函数名规范为api_{接口名}

2017-03-01 14:18:42 179

原创 筋斗云接口编程 / 函数型接口

如果不是典型的对象增删改查操作,可以设计函数型接口,比如登录、修改密码、上传文件这些。函数型接口一般实现在文件 php/api_functions.php 中,它被主文件api.php包含。 假设有以下接口定义:获取登录信息(who am i?)whoami() -> {id}应用逻辑- 权限:AUTH_USER (必须用户登录后才可用)我们使用模拟数据实现接口,函数名规范为api_{接口名}

2017-03-01 14:16:31 175

原创 筋斗云接口编程 / 函数型接口

如果不是典型的对象增删改查操作,可以设计函数型接口,比如登录、修改密码、上传文件这些。函数型接口一般实现在文件 php/api_functions.php 中,它被主文件api.php包含。 假设有以下接口定义:获取登录信息(who am i?)whoami() -> {id}应用逻辑- 权限:AUTH_USER (必须用户登录后才可用)我们使用模拟数据实现接口,函数名规范为api_{接口名}

2017-03-01 14:15:42 564

原创 筋斗云接口编程 / 创建Web接口项目

[任务]用筋斗云框架创建一个Web接口项目叫mysvc,创建数据库,提供对ApiLog对象的操作接口。先从github上下载开源的筋斗云后端框架及示例应用:https://github.com/skyshore2001/jdcloud-php建议安装git工具直接下载,便于以后更新,例如直接创建Web接口项目叫mysvc:git clone https://github.com/skyshore20

2017-02-24 08:38:11 1149

原创 变脸式应用 / 制作原生APP(二)

壳版本管理请牢牢记住,由于原生壳与H5应用的分离,用户安装的用户壳可能是旧版本的,而线上的H5应用永远是最新版本。假如在原生壳中新增加了插件,应增加壳版本号。 操作上也可将壳版本等同于原生应用的版本代码(安卓叫App Version Code,苹果叫CF Bundle Version),那么要注意插件变动时,一定也要变动原生应用版本。需求:新版本壳中增加了某插件,希望安装旧版本壳的用户在用到此插件

2017-02-23 16:34:49 434

原创 变脸式应用 / 制作原生APP

H5应用可以打包生成苹果或安卓原生应用,一般也称为混合应用程序(Hybird App)。并不是所有的H5应用都适合打包成原生应用,如果把一个普通的手机网站包装成原生应用,即使它制作的外观像是原生应用, 但切换页面时的网页刷新和加载导致速度慢、费流量、体验差,并不适合制作APP,而且像苹果应用市场等也容易拒绝此类APP上架。 为了接近原生应用的用户体验,可打包的H5应用应是支持多逻辑页的单网页应用

2017-02-23 16:33:54 1122

原创 变脸式应用 / 会话重用与自动登录

自动跳转登录页和会话重用为了避免每次打开或刷新应用都要再登录,会话重用是实现短期免登录进入的常用方法。[任务]打开H5应用时(从任意入口页进入),如果刚刚登录过,则可以免登录直接打开入口页。 如果尚未登录过,则跳转至登录页面,待登录成功后跳转到入口页。点退出登录回到首页,如果首页必须登录,则到登录页。在操作过程中,一旦调用某个接口返回了未登录错误(实际中可能是客户端掉线、服务端重启等情况),

2017-02-21 10:10:05 765

原创 变脸式应用 / 进入与退出应用(二)

登录与退出登录和退出是多数应用都需要的功能。我们在筋斗云示例应用中,可以看到登录退出相关的代码:(index.js文件)function handleLogin(data){ MUI.handleLogin(data); // g_data.userInfo已赋值}function logoutUser(){ // 这里可以删除当前用户相关的storage, cooki

2017-02-21 10:09:15 429

原创 变脸式应用 / H5应用发布上线

H5应用发布上线上一章介绍了H5应用的编译优化,生成了发布目录,配置好WEB服务器后,将发布目录上传到服务器即可完成发布。为了H5应用程序升级后客户能及时更新,建议将H5应用的主html文件及逻辑页面文件夹下html/js文件的缓存策略设置为”no-cache”。 (在开发环境下,一般建议所有文件都设置为不缓存。)建议使用Apache或nginx作为筋斗云H5应用线上生产环境的WEB服务器。 项

2017-02-20 08:57:03 1458

原创 变脸式应用 / 创建多个H5应用

创建多个H5应用[任务]在示例项目中,只有一个应用即index.html。 实际在一个H5项目中,常常需要多个应用,例如给用户使用的手机客户端应用、给员工使用的员工端应用等。 我们将在同一项目下再创建一个新的“员工端”应用。筋斗云要求每个H5应用有个内部名称(appName), 在示例应用中,appName定义为user,表示用户端,假如定义员工端应用的内部名称为emp,我们创建这些文件:新

2017-02-20 08:55:00 4441

原创 变脸式应用 / H5应用优化

目前我们运行的H5应用直接是在项目下的server目录中,这称为开发版本,没有进行优化。 在生产环境下,一般会将开发版本进行优化,生成发布版本后上线,可提升H5应用性能。用webcc编译H5应用[任务]使用webcc工具,编译项目下的server目录,生成发布版本目录”output_web”。作为一个WEB应用,发布时最常见的需求是JS/CSS/HTML文件合并和压缩(minify)。 H5应用

2017-02-20 08:54:13 871

原创 变脸式应用 / 分页列表框架(四)

分页列表的接口适配上面学习了易用强大的分页列表,支持分页的后端接口使用的是筋斗云的规范,返回列表像这样:{ list: [ {field1: "val1", field2: "val2"}, {field1: "val3", field2: "val4"}, ], nextkey: 2}上面用list字段返回列表。另外还支持一种等价的压缩表

2017-02-16 16:23:57 383

原创 变脸式应用 / 分页列表框架(三)

显示多个列表本节学习导航栏加多个列表这一常见模式。[任务]在示例应用时,订单列表页便按照订单状态,分成“待服务”和“已完成”两栏,分别对应一个列表。 我们将练习页面orders2也改造成支持分栏的样式。首先,我们熟悉下后端列表查询的接口。 筋斗云后端接口支持业务查询协议,可以使用cond参数才指定查询条件:取待服务订单:callSvr(“Ordr.query”, {cond: “status=

2017-02-16 16:19:58 335

原创 变脸式应用 / 分页列表框架(二)

使用DOM模板创建组件[任务]上节练习中,函数onAddItem里,直接使用了拼接html的方式动态创建列表项,当组件复杂时可读性和可维护性很差。 我们将使用示例应用自带的weui样式库美化列表项,并用DOM模板的方法重写创建组件过程,让代码更清晰。一般情况下,不建议直接拼接html,而是通过模板及mvvm等技术来创建,这里给大家推荐开源的超轻量的jquery-dataview库,可在github

2017-02-16 16:19:10 1240

下载猎手(CacheHunt) - 浏览器缓存辅助工具

下载猎手(CacheHunt) 可以帮助您方便的从缓存中查找浏览过的音乐、铃声、视频、文档、程序等,特别值得一提的是为方便找到需要的文件可以直接预览(如播放常见的视频音频等)。当您在网上在线欣赏完内容后感到特别喜爱,希望下载下来而网站又未提供下载,就可以用本软件非常方便地找到它并另存到本地硬盘上。 本软件免费,免安装,直接运行,无任何捆绑插件。 如果你在在线视频网站上看到精彩的内容却苦于无法下载到本地,赶快点击下面的链接使用该软件吧!

2010-04-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除