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

news2024/11/20 22:40:45

本篇博客算是一个开头,接下来会持续更新使用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地址:GitHub - PerfectlySoft/Perfect: Server-side Swift. The Perfect core toolset and framework for Swift Developers. (For mobile back-end development, website and API development, and more…))。Perfect的官网地址:Server-side Swift - Perfect | 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:GitHub - PerfectlySoft/PerfectTemplate: Empty Perfect Starter Project.)。具体执行命令以及执行结果如下所示:

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分享地址为: GitHub - lizelu/PerfectDemo: 使用Swift的Perfect开发Web服务端 ,在以后的博客中,我们会陆续的对该Demo的具体实现细节进行讲解,本篇博客算是一个Perfect框架的概述。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/491638.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenGL光照教程之 透光物

引言 我们目前使用的所有光照都来自于一个单独的光源,这是空间中的一个点。它的效果不错,但是在真实世界,我们有多种类型的光,它们每个表现都不同。一个光源把光投射到物体上,叫做投光。这个教程里我们讨论几种不同的投…

告别被拒,如何提升iOS审核通过率(上篇)

iOS审核一直是每款移动产品上架苹果商店时面对的一座大山,每次提审都像是一次漫长而又悲壮的旅行,经常被苹果拒之门外,无比煎熬。那么问题来了,我们有没有什么办法准确把握苹果审核准则,从而提升审核的通过率呢&#x…

ESP32-C2开发板简介

C2是一个芯片采用4毫米x 4毫米封装,与272 kB内存。它运行框架,例如ESP-Jumpstart和ESP造雨者,同时它也运行ESP-IDF。ESP-IDF是Espressif面向嵌入式物联网设备的开源实时操作系统,受到了全球用户的信赖。它由支持Espressif以及所有…

PtQt的使用与pycharm的结合

PtQt的使用与pycharm的结合 环境安装 pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple # 如果执行成功,没有任何错误提示,则表明环境搭建成功 from PyQt5 import QtWidgets# 当然也可以查看PyQt版本 from PyQt5.QtCore import * print…

Unity之OpenXR+XR Interaction Toolkit实现 移动和转向

一.前言 我们知道,在VR游戏中,我们除了可以通过传送来移动之外,还可以通过手柄的遥感进行移动,那么接下来,我们就介绍一下如果通过XR Interaction Toolkit来实现遥感控制任务移动和旋转 二.准备工作 我们需要准备好…

C. Maximum Subrectangle(思维 + 考察两个数组相乘得到的矩阵的含义)

Problem - C - Codeforces 给定两个正整数数组 a 和 b,长度分别为 n 和 m。 定义矩阵 c 为一个 nm 的矩阵,其中 ci,jai⋅bj。 你需要在矩阵 c 中找到一个子矩形,使得它的元素之和最多为 x,并且它的面积(即元素总数&a…

考pmp有什么好处?

PMP证书报名条件要求高,这是众所周知的事,那你通过了PMP考试,就证明你是有一定能力的,重要的是,你已经有了至少半年的项目管理经验,并且在你申请考试的前六年内,累计项目管理达三年。 PMP有什么…

【Hadoop-Yarn】Yarn的常用命令

【Hadoop-Yarn】Yarn的常用命令 1)查看任务列表2)杀死任务3)查看日志4)根据 Application 状态过滤任务5)查询 Container 日志6)查看尝试运行的任务7)yarn container 查看容器8)yarn …

Conda 安装 OpenCV

1、conda 切换虚拟环境 activate 虚拟环境名称 温馨提示:查询虚拟环境列表 conda env list 2、conda 查看安装源 conda config --show-sources 我本地安装源为: Index of /anaconda/pkgs/free/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 修改c…

Qt音视频开发44-本地摄像头推流(支持分辨率/帧率等设置/实时性极高)

一、前言 本地摄像头推流和本地桌面推流类似,无非就是采集的设备源头换成了本地摄像头设备而不是桌面,其他代码完全一样。采集本地摄像头实时视频要注意的是如果设置分辨率和帧率,一定要是设备本身就支持的,如果不支持那就歇菜&a…

常规项目风险识别的规范流程和方法

一、识别风险输入 识别项目风险,首先需要对项目管理计划、项目文件、协议、采购文档、事业环境因素、组织过程资产等进行风险识别。 项目管理计划是指:需求、进度、成本、质量、资源、风险等管理计划以及范围基准、进度基准、成本基准。而项目文件指&…

普通2本,去过字节外包,到现在年薪25W+的测试开发,我的2年转行心酸经历...

个人简介 我是一个普通二本大学机械专业毕业,17年毕业,19年转行,目前做IT行业的软件测试已经有3年多,职位是高级测试工程师,坐标上海… 我想现在我也有一点资格谈论关于转行这个话题;希望你在决定转行之前…

Python爬虫-xpath方法爬虫技术分享,更高效,代码简洁!

这里写目录标题 一、获取文档树对象二、文本转化文档树对象文件转化文档树对象节点、元素、属性、内容路径表达式通配符谓语多个路径函数实战信息 ↓ ↓ ↓ 加下方名片找我,直接拿源码还有案例 ↓ ↓ ↓ 一、获取文档树对象 通过Xpath 获取文档的对象,获…

matlab定义函数

1新建文件 首先建立M文件或直接点击(File/New/Function)建立函数文件,其中函数文件的格式是: function [输出变量] 函数名称(输入变量) % 注释 % 函数体 2函数语法 2.1基本语法 function yf(x) %函数的声明 yx^2 就是建立了一个y…

边框虚线滚动动画特效

边框线条效果如上 /*边框虚线滚动动画特效*/.border-animate {background: linear-gradient(90deg, gray 60%, transparent 60%) repeat-x left top/10px 1px,linear-gradient(0deg, gray 60%, transparent 60%) repeat-y right top/1px 10px,linear-gradient(90deg, gray 60%,…

今天面了一个来字节要求月薪23K,明显感觉他背了很多面试题...

最近有朋友去字节面试,面试前后进行了20天左右,包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说,80%的人都会栽在第一轮面试,要不是他面试前做足准备,估计都坚持不完后面几轮面试。 其实&…

用于2.4GHz ISM频段FHSS解决方案的射频IC

比较了 WLAN 和相关系统。IEEE802.11b FHSS 支持 1.6Mbps 数据传输。MAX2644 SiGe LNA用作2.5GHz频段的PA驱动器和接收器低噪声放大器(LNA)。MAX2240和MAX2242功率放大器(PA)产生~20dBm输出,具有所需的线性度。MAX2754…

EasyRecovery15Mac中文电脑版安装详细操作教程

EasyRecovery是一款操作安全、恢复性比较高的数据恢复工具,小伙伴们可以使用EasyRecovery恢复各种各样被删除的文件、视频、图片等。EasyRecovery还可以支持恢复被格式化的媒体文件,只是使用EasyRecovery恢复时时间较久。如果小伙伴们有误删除的文件需要…

第三十三章 Unity Mecanim动画系统(下)

本章节,我们继续讲解Unity的 Mecannim 动画系统。在上一章节中,我们设置了动画过渡,但是还没有为这些动画过渡设置过渡条件。这个过渡条件需要在“Animator”窗口中设置。这个窗口的左边是用来编辑“动画层”和“动画参数”的。这里的“动画参…

Redis的20种使用场景

本文介绍Redis除了缓存以外的使用场景。 测试源码:https://github.com/vehang/ehang-spring-boot/tree/main/spring-boot-011-redis 1缓存 本文假定你已经了解过Redis,并知晓Redis最基础的一些使用,如果你对Redis的基础API还不了解&#xff…