本篇博客算是一个开头,接下来会持续更新使用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. Database Replay和Consolidated Database replay

    简介 在数据库的迁移和升级场景中,我们经常会遇到一个问题:在做压力测试时,如何模拟真实的业务压力,解决这个问题的方法有很多,比如:应用方开发模拟程序或者使用压力测试工具模拟,如load runner, ...

  2. 细说前端自动化打包工具--webpack

    背景 记得2004年的时候,互联网开发就是做网页,那时也没有前端和后端的区分,有时一个网站就是一些纯静态的html,通过链接组织在一起.用过Dreamweaver的都知道,做网页就像用word编辑文档 ...

  3. 在Ubuntu 16.10 安装 git 并上传代码至 git.oschina.net

    1. 注册一个账号和创建项目 先在git.oschina.net上注册一个账号和新建一个project ,如project name 是"myTest". 2.安装git sudo ...

  4. 引人瞩目的 CSS 变量(CSS Variable)

    这是一个令人激动的革新. CSS 变量,顾名思义,也就是由网页的作者或用户定义的实体,用来指定文档中的特定变量. 更准确的说法,应该称之为 CSS 自定义属性 ,不过下文为了好理解都称之为 CSS 变 ...

  5. 奇葩问题-TextView无法获取值

    问题场景 前几天写一个界面的时候,遇到一个非常奇葩的问题.app第一次安装的时候,这里针对用户第一次安装的时候,后来是不会出现这个问题了.我明明是对某个界面的一个textview赋值了,而且服务端也返 ...

  6. How those spring enable annotations work--转

    原文地址:http://blog.fawnanddoug.com/2012/08/how-those-spring-enable-annotations-work.html Spring's Java ...

  7. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

  8. Collection集合

    一些关于集合内部算法可以查阅这篇文章<容器类总结>. (Abstract+) Collection 子类:List,Queue,Set 增: add(E):boolean addAll(C ...

  9. C# 序列化与反序列化几种格式的转换

    这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...

  10. 基于注解的Spring多数据源配置和使用

    前一段时间研究了一下spring多数据源的配置和使用,为了后期从多个数据源拉取数据定时进行数据分析和报表统计做准备.由于之前做过的项目都是单数据源的,没有遇到这种场景,所以也一直没有去了解过如何配置多 ...