本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客。当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现。Perfect框架是加拿大一个创业团队开发的,目前是Perfect2.0版本,关于Perfect框架,下方会详细的介绍。本篇博客会演示一个完整的Demo, 该Demo完全由Swift3.0开发,其中包括服务端和iOS客户端,数据库采用的是MySQL。

进一步说,本篇博客将会演示一个使用Swift3.0开发的记事本,当然该记事本的服务端和iOS端都是使用Swift 3.0开发的。该记事本包括登录,注册,添加笔记,更新笔记,删除笔记以及查询笔记,简单的说就是对笔记的CURD操作。本篇博客算是Swift3.0服务端开发系列博客的开始,我们先通过今天这篇博客整体的看一下Perfect框架可以做的事情,然后一步一步的开发出一个完整的项目。

本篇博客先对Perfect框架进行了简单介绍,然后演示由Perfect开发的Demo, 最后给出相应Demo的部分技术实现。

一、Perfect框架简介

Perfect框架是目前比较完善的Swift服务端框架之一,当然其他的还有Vapor等其他的开源框架,横向的对比了一下,还是Perfect的功能全面一些,目前Perfect的最新版本是2.0,由加拿大一创业团队开发并维护。Perfect框架也是开源的,在Github上可以找到相关的源代码(Perfect-Github地址:https://github.com/PerfectlySoft/Perfect)。Perfect的官网地址:https://www.perfect.org/,官网上有相关的Demo以及使用文档,关键是其开发文档有中文版的,这一点还是比较好的,官方开发文档地址:https://www.perfect.org/docs/index_zh_CN.html。

  

因为Swift目前最新的版本是3.0,所以Perfect2.0只能在最新的Swift3.0版本上进行编译。当然Swift语言支持Linux,iOS和Mac OS,所以Perfect框架也可以在上述的三种系统中进行编译。我们可以使用Perfect开发Web应用,API等服务端应用。更多关于Perfect框架的详细内容,请移步于Github或者官网进行了解,在此就不做过多赘述了。

二、示例展示

接下来我们先来看一下使用Swift3.0开发的服务端和iOS端的小Demo。在博客的开头我们也提到过,我们要展示的Demo是一个简单的笔记。包括登录、注册、笔记的增删改查等功能。我们的服务端和iOS客户端都是使用Swift3.0来实现的,当然服务端就是使用的上述的Perfect框架。接下来我们整体的看一下Demo的效果,后续的博客会给出更为具体的实现方式。

1.Demo功能介绍

下方就是我们Demo运行的具体效果,首先输入用户名点击下一步,如果用户已注册,让其输入密码登录。登录后进入笔记列表页面,可以对相应的笔记进行增删改查操作,具体做法如下所示。下图左边就是iOS客户端运行的效果,右边就是MySQL中的数据更新情况。

因为Demo的功能比较简单,所以我们数据库的表结构也是非常简单的,user表中存储的就是注册用户的信息,content表中存储的就是笔记的相应信息,在content中有一个外键是userID, 每条内容通过userID外键与相应的用户想关联。换句话说,contentId与userId是一对多的关系。关于该Demo的数据库设计细节,后期会详细的介绍。

  

2.示例的项目结构

下方就是服务端+iOS客户端的目录结构,当然项目比较简单,没怎么分层。iOSClientForPerfect就是iOS客户端工程,PerfectTemplate就是服务端的工程。这两个Project位于同一个WorkSpace中。在PerfectTemplate中会有一些依赖的库,Source文件夹下除了PerfectTemplate文件中的内容外,其他的都是依赖包,这些依赖包可以通过Package.swift文件进行配置。

  

下方是本工程中的Package.swift文件中的内容,也就是本工程中所依赖的包。

  

3、服务器log日志记录

从上述依赖的包中我们可以清楚的看到依赖了日志过滤以及日志写入的包,如果你的服务端要支持相关的日志记录功能的话,那么就需要添加上述的这两个依赖包了。下方就是我们工程记录的日志文件。主要记录了本工程的请求和相应以及Sql执行的相关信息,如下所示:

  

4.服务端API组织结构

下方就是本篇博客所演示Demo的服务端API。数据传输的格式为JSON,iOS客户端将会对服务器端返回的JSON进行请求。全是POST请求,相应报文包括list,result以及errorMessage。list中存储的就是从服务端获取的相关数据,而result中存储的是接口请求状态,SUCCESS标志着请求成功,FAILURE标志着请求失败。当请求失败时,errorMessage会有相应的报文信息。当然这种API是比较常规的的做法,当然在请求报文中,应该添加上公共报文的,公共报文中可以添加token等公共信息,当然本Demo中没有添加,下方是部分API

(1)、通过用户名查询用户是否存在接口

请求方式:POST

请求地址:/queryUserInfoByUserName

请求参数:

  

响应报文:

  

(2)、用户登录或者注册接口

请求方式:POST

请求地址:/login,/register

请求参数:

  

响应报文:

  

(3)、获取相应用户的笔记列表接口

请求方式:POST

请求地址:/contentList

请求参数:

  

响应报文:

  

其他的就不一一的展示了。上述的Demo就先到这儿,等我们介绍完Perfect的基本知识后,再对上述的Demo的具体实现细节进行剖析。本篇博客对上述Demo就不做过多赘述了。

三、Perfect框架的获取和编译

上面算是Perfect框架的引子, 接下来我正式的进入Perfect框架的主题。当然我们以Mac OS下的Perfect为准,如果你使用的是Linux系统,Perfect官网上有相关的配置过程,关于Linux下的Perfect在此就不做过多赘述了。

1.获取Perfect框架的模板

首先我们从Github上Clone一份Perfect框架的模板(PerfectTemplate:https://github.com/PerfectlySoft/PerfectTemplate)。具体执行命令以及执行结果如下所示:

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Andale Mono"; color: #28fe14; background-color: rgba(0, 0, 0, 0.9) }
span.s1 { }

git clone https://github.com/PerfectlySoft/PerfectTemplate

cd PerfectTemplate

ls

  

2.编译模板

在PerfectTemplate目录中有一个Package.swift文件,其中可以指定工程的名称以及工程所依赖的包。首先我们打开Package.swift,指定我们工程的文件名。具体如下所示。

  

指定完工程名,接下来就该编译我们的模板工程了,下方是编译并执行上述工程的命令。因为首次编译时需要从github上下载相关的依赖包,所以首次编译的过程是比较漫长的,等待一段时间,编译和执行的命令如下:

编译:swift build

执行:.build/debug/ZeLuLiPerfectDemo

还是那句话,首次编译的过程会比较慢,下方就是首次编译是需要下载的各种依赖包,然后再进行编译的过程:

  

编译完成后,会提示你链接并运行的命令,如果执行该命令后,你的Perfect服务端的服务就启动了,如下所示:

  

执行完毕后,我们就可以通过浏览器访问我们的Perfect服务器了。默认端口是8181,所以我们访问的本机地址是localhost:8181。下方是访问上述地址返回的具体信息,如下所示:

  

我们可以在Source文件夹下的main.swift文件中对我们的服务进行相关的配置,我们可以改一下端口和返回的内容:

   

重新编译并运行,结果如下所示:

  

3.生成Xcode项目

编译并运行成功后,我们可以使用Swift3.0自带的包管理器,生成一个Xcode项目。下方就是生成的Xcode的Project文件的命令

swift package generate-xcodeproj

运行上面的命令就会生成相应的xcodeproj文件,我们就可以使用Xcode来管理我们的项目了。因为Project框架仅支持Swift3.0, 所以我们需要使用Xcode8.0+版本来打开生成的xcodeproj文件。如下:

  

你就可以打开上面生成的xcodeproj文件了,可以通过Xcode来编译和运行我们的Perfect项目,当然要选择Mac运行。运行完毕后,我们的服务就启动了,就可以在浏览器中进行访问了,如下所示:

  

本篇博客就先到这儿,下篇博客仍然会对Project框架进行介绍,在使用该框架时,我们还会涉及一些Perfect框架的部分源码的解析。

Perfect完整Demo的github分享地址为: https://github.com/lizelu/PerfectDemo ,在以后的博客中,我们会陆续的对该Demo的具体实现细节进行讲解,本篇博客算是一个Perfect框架的概述。

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ff4647 }
span.s1 { }

Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)的更多相关文章

  1. Eclipse、MinGW、JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法)

     Eclipse.MinGW.JNI编写C++生成dll, Java端调用的完整示例(附java.lang.UnsatisfiedLinkError解决方法) 问题背景:之前的JNI编程都是基于And ...

  2. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

  3. android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

      android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创) 一直想搞NDK开发却一直给其他事情耽搁了,参考了些网上的资料今天终于把 ...

  4. Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 具体图文解说

    版权声明:本博客全部文章均为原创.欢迎交流.欢迎转载:转载请勿篡改内容,而且注明出处,谢谢! https://blog.csdn.net/waldmer/article/details/3272500 ...

  5. ELK6.0环境搭建及配置

    ELK环境搭建及配置 ElasticSearch在5.x后的安装和插件的官方执行更好了,head插件官方默认集成在kibana的dev tools里,支持rpm包方式安装,x-pack安装后支持权限及 ...

  6. STS开发环境搭建与配置

    STS开发环境搭建与配置 (2012-04-11 07:24:51) 转载▼ 1.   环境准备 安装JDK.MAVEN 1.1.        下载 下载sprdfingsource-tool-su ...

  7. 跟我一起,利用bitcms内容管理系统从0到1学习小程序开发:一、IIS下SSL环境搭建

    缘起 1.从事互联网十来年了,一直想把自己的从事开发过程遇到的问题给写出来,分享给大家.可是可是这只是个种想法,想想之后就放下了,写出来的类文章是少之又少.古人说无志之人常立志,有志之人立长志.今天, ...

  8. Xamarin Studio在Mac环境下的配置和Xamarin.iOS常用控件的示例

    看过好多帖子都是Win环境装XS,Mac只是个模拟器,讲解在Mac环境下如何配置Xamarin Studio很少,也是一点点找资料,东拼西凑才把Xamarin Studio装在Mac上跑起来,如下: ...

  9. 使用JAVA开发微信公众平台(一)——环境搭建与开发接入

    一. 初始微信公众平台 微信公众平台,即我们平时所说的"公众号",曾用名"官方平台"."媒体平台",但最终命名为"公众平台&quo ...

随机推荐

  1. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  2. Jquery mobiscroll 移动设备(手机)wap日期时间选择插件以及滑动、滚动插件

    Jquery Mobiscroll是一个用于触摸设备(Android phones, iPhone, iPad, Galaxy Tab)的日期和时间选择器jQuery插件.以及各种滑动插件 可以让用户 ...

  3. SQL:指定名称查不到数据的衍伸~空格 换行符 回车符的批量处理

    异常处理汇总-数据库系列  http://www.cnblogs.com/dunitian/p/4522990.html 先看看啥情况 复制查询到的数据,粘贴一下看看啥情况 那就批量处理一下~ 就这样 ...

  4. scp报错 -bash: scp: command not found

    环境:RHEL6.5 使用scp命令报错: [root@oradb23 media]# scp /etc/hosts oradb24:/etc/ -bash: scp: command not fou ...

  5. 基于RN开发的一款视频配音APP(开源)

    在如今React.ng.vue三分天下的格局下,不得不让自己加快学习的脚步.虽然经常会陷入各种迷茫,学得越多会发现不会的东西也被无限放大,不过能用新的技术作出一些小项目小Demo还是会给自己些许自信与 ...

  6. python10作业思路及源码:类Fabric主机管理程序开发(仅供参考)

    类Fabric主机管理程序开发 一,作业要求 1, 运行程序列出主机组或者主机列表(已完成) 2,选择指定主机或主机组(已完成) 3,选择主机或主机组传送文件(上传/下载)(已完成) 4,充分使用多线 ...

  7. PHP设计模式(五)建造者模式(Builder For PHP)

    建造者模式:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示的设计模式. 设计场景: 有一个用户的UserInfo类,创建这个类,需要创建用户的姓名,年龄,爱好等信息,才能获得用 ...

  8. js 基础篇(点击事件轮播图的实现)

    轮播图在以后的应用中还是比较常见的,不需要多少行代码就能实现.但是在只掌握了js基础知识的情况下,怎么来用较少的而且逻辑又简单的方法来实现呢?下面来分析下几种不同的做法: 1.利用位移的方法来实现 首 ...

  9. 使用rowid抽取数据方法以及大数据量游标卡住的应对

    平时工作的时候,经常会遇到这种事情,从一个大表A中,抽取字段a在一个相对较小B的表的数据,比如,从一个详单表中,抽取几万个用户号码的话单出来.这种时候,一般来说, 做关联查询: create tabl ...

  10. 【干货分享】流程DEMO-合同会审表

    流程名: 合同会审表  业务描述: 合同的审批及签订  流程相关文件: 流程包.xml 事务呈批表业务服务.xml 事务呈批表主数据.xml  流程说明: 1.此流程必须先进行事务呈批表流程的配置才可 ...