微信小程序的开发和APP的开发有些类似,但又略有不同。
App一般有很多版本,甚至要兼容很多版本兼容,尤其是各个小版本之间一般都是要共存的。当然如果有较大变化或者升级,尤其是底层逻辑或者数据库结构改动,一般会强制升级。
因为要多个版本兼容,互相不影响使用,那么服务器的接口就需要多版本共存。
一般为了支持多版本共存,就需要对API做一个版本的划分,服务端的代码,当然也需要按版本做好不同的区分。
大致方案如下:
一、每一个版本一套完整独立的代码
这种方法简单直接,也特别号理解,简单的说,就是每升级一次,就完全复制一套完整的代码,比如可以利用SVN或者GIT的分支,来实现。开发完成后直接整套部署。
优势很明显,简单且完全独立,便于独立部署,且各个版本之间完全不影响,互相不依赖,易于维护。
不足也明显,就是如果版本较多,升级频率较高则会产生大量的冗余重复代码。
二、一套代码所有版本在一起,在类(Class)或者方法(Function)上区分,做好路由选择
优势也算明显,就是代码量少,整体就一套。
不足略微多一点,不恰当的维护风险很高,代码容易过于臃肿,各个版本之间依赖增加,不利于长期维护,也不支持每个版本独立部署。
当然,实际开发中,往往会综合考虑,会将两种方式结合,大版本之间各自独立,减少依赖和实现大版本独立部署,小版本一个项目内兼容,减少代码量。
有了前边这些铺垫,我们看看微信小程序的特点,找出一个适合微信小程序的情况。
微信不是APP,不需要下载,正常情况只要重新启动小程序基本就自动更新成最新的版本了。当然,微信也可以控制用户强制刷新。
因此,接口设计或许就不需要像APP那样搞出多个版本过于复杂,不利于维护,只要能很好的完成无感切换即可。
根据开发需要,暂定了将接口代码分成了AB两个版本部署,开发代码是一套(一个项目),看看效果如何。
这样一个项目维护绝对是便于维护,代码也不会冗余,维护时根本不需要考虑版本问题,每个开发人员只要将最新的功能实现即可,最后版本控制由上线部署时做好区分即可。
简单描述下:部署时,可以在同一个WEB目录,建立AB两个目录,小程序只需要传回AB两个不同的参数,就会知道API的选择了,然后由nginx解析选择即可,服务端代码中完全不用考虑任何版本问题。
AB两个版本,也正好可以实现,正式上线对外前,体验版时也可以使用生产环境的一切配置和数据,相当于两套(版本)代码同时在生产环境,正式小程序调用A接口,体验版调用B接口。可以很好的完成预上(仿真)线测试。
这个思路,对于服务端代码和小程序代码,都是非常简单的,几乎可以完全忽略版本问题。只要配置好nginx就可以了。
最早想到这个方案的时候,正经兴奋了好一阵子,尤其是配置好nginx调试通过后,感觉完美^_^。
将nginx的部分配置附上
server { listen 80; listen 443 ssl http2; server_name mp.abc.com; root /www/wwwroot/a/public; index index.php index.html index.htm; etag on; gzip on; gzip_vary on; gzip_http_version 1.0; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 2; gzip_disable msie6; gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/xml+rss; client_max_body_size 110m; client_body_buffer_size 1024k; keepalive_timeout 60; sendfile on; sendfile_max_chunk 512k; tcp_nopush on; tcp_nodelay on; ssl_certificate /www/server/panel/ssl/xxx.pem; ssl_certificate_key /www/server/panel/ssl/xxx.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location ^~ /a { alias /www/wwwroot/a/public; if (!-e $request_filename) { rewrite ^ /a/index.php last; } location ~ \.php$ { if (!-f $request_filename) { return 404; } #fastcgi_pass unix:/tmp/php-fpm-72.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; } } location ^~ /b { alias /www/wwwroot/b/public; if (!-e $request_filename) { rewrite ^ /b/index.php last; } location ~ \.php$ { if (!-f $request_filename) { return 404; } #fastcgi_pass unix:/tmp/php-fpm-72.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include fastcgi_params; } } location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { #fastcgi_pass unix:/tmp/php-fpm-72.sock; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location = /robots.txt { access_log off; log_not_found off; } location = /favicon.ico { access_log off; log_not_found off; } }
这个段配置主要的不同就是加粗的部分,其他都是nginx的通用内容。
简单理解就是在同一个web目录下,建立两个不同的目录,然后每次上线时,将最新代码部署到对应的AB目录中即可。相当于接口代码先上线,然后体验版测试生产环境。
没问题后,小程序直接提审即可。通过后新打开小程序的用户自动切换到新接口,一直使用的用户或者缓存等更新不及时一直使用原接口。当然也可以强制更新。
目前使用至今,这个方案一直没有什么问题。
哪位朋友有其他方法也可以分享多多交流。
整篇帖子有说错的地方,烦请指出,十分感谢!
微信小程序调用接口地方的配置附上文章来源:https://www.toymoban.com/news/detail-424989.html
/*
* 针对生产环境:切换生产环境接口目录,两个版本交替上线使用不同的目录 * 例如:生产版本1.0使用目录“a”,则pre版本1.1提前修改成“b” * 下一次生产版本1.1使用的是目录“b”,而本地pre提前修改成“a” */ const VERSION = 'a'; const STORAGE = '1.0'; // 接口各个环境的域名配置 const MP_HOST = []; MP_HOST['dev'] = 'http://dev.abc.com'; MP_HOST['pre'] = 'https://pre.abc.com'; MP_HOST['pro'] = 'https://mp.abc.com/' + VERSION;
文章来源地址https://www.toymoban.com/news/detail-424989.html
到了这里,关于微信小程序自研业务接口的服务器一点配置记录整理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!