如何在 xcode 中从头开始(Swift 服务器)创建一个新的 Perfect Project?
How to make a new Perfect Project from scratch (Swift server) in xcode?
Perfect 是一个新的 Swift 框架,用于在 swift 中创建 web/http 服务器。文档还没有,我发现从头开始构建一个新项目很麻烦。我不知道需要导入哪些框架,哪个是应用程序的入口点。 main.swift 等...
我想创建一个新的 xcworkspace 来放置我的项目,"a hello world server"。
我试图解决的问题:
- 必须包含哪些框架?
- Perfect服务器应该如何创建,app的入口点是什么?
- 如何创建以 "Hello World message" 响应的 "hello" 根?
- 我应该如何为服务器创建目标并最终 运行 服务器?
我不确定您是否找到了解决方案,但我就是这样做的:
'Tap Tracker' 应用程序是使用 Perfect 库编写的应用程序,因此即使文档尚未准备好,您仍然可以剖析该应用程序。我重命名了应用程序和 classes/methods。有一个 index.html,我将其移至 'www' 根,然后使用 TTHandler 重新路由视图以尝试制作标准布局。它不能很好地工作,因为框架太年轻了,但是可以做到。我会更具体,但我暂时回到 rails 因为我想等到它更成熟一点。
乱搞很有趣,我可能会在完美的基础上编写自己的库 onc 功能创新平静下来,我可以用它做出稳定的东西。
我设法写了一个关于这个的“Hello World”指南。 http://code-me-dirty.blogspot.co.uk/2016/02/creating-perfect-swift-server.html
简而言之,您需要这样进行:
克隆原始项目
创建新工作区
新建项目
导入PerfectLib.xcodeproject & 导入PerfectServer.xcodeproject但不复制
设置您的项目方案以启动 PerfectServer HTTP 应用程序
Link“Linked 框架和库”部分的 PerfectLib
设置框架目标的构建设置*
创建PerfectHandlers.swift并粘贴(最好写出感觉)下面的代码
import PerfectLib
//public method that is being called by the server framework to initialise your module.
public func PerfectServerModuleInit() {
// Install the built-in routing handler.
// Using this system is optional and you could install your own system if desired.
Routing.Handler.registerGlobally()
// Create Routes
Routing.Routes["GET", ["/", "index.html"] ] = { (_:WebResponse) in return IndexHandler() }
// Check the console to see the logical structure of what was installed.
print("\(Routing.Routes.description)")
}
//Create a handler for index Route
class IndexHandler: RequestHandler {
func handleRequest(request: WebRequest, response: WebResponse) {
response.appendBodyString("Hello World")
response.requestCompletedCallback()
}
}
那么你就可以运行了。在我的博客上,我有一个较长、更详细的版本,如有必要,我会在这里更新。
构建设置
- 部署位置:是
- 安装构建产品位置:$(CONFIGURATION_BUILD_DIR)
- 安装目录:/PerfectLibraries
- 跳过安装:否
我刚刚写了一个教程,我想作为另一个解决方案分享,它概述了如何使用 Perfect 创建 Web 服务以及与之交互的应用程序。
http://chrismanahan.com/creating-a-web-service-swift-perfect
总结
- 您的项目必须在工作区中。此工作区还应包括 PerfectServer 和 PerfectLib 项目。
- 在您的项目中,创建一个新的 OSX 框架目标。这将是您的服务器目标
Link PerfectLib 同时包含您的服务器目标和您的应用程序目标(如果您正在与服务器一起构建应用程序)
编辑服务器的 运行 方案以使用 PerfectServer HTTP App 启动。
在服务器目标的构建设置中,设置以下标志:
- 跳过安装 = 否
- 部署位置=是
- 安装目录=/PerfectLibraries
- 安装构建产品位置 = $(CONFIGURATION_BUILD_DIR)
在服务器的文件夹中创建一个新文件。该文件将处理传入的请求。包括 [大部分] 以下内容:
import PerfectLib
// This function is required. The Perfect framework expects to find this function
// to do initialization
public func PerfectServerModuleInit() {
// Install the built-in routing handler.
// This is required by Perfect to initialize everything
Routing.Handler.registerGlobally()
// These two routes are specific to the tutorial in the link above.
// This is where you would register your own endpoints.
// Take a look at the docs for the Routes API to better understand
// everything you can do here
// register a route for gettings posts
Routing.Routes["GET", "/posts"] = { _ in
return GetPostHandler()
}
// register a route for creating a new post
Routing.Routes["POST", "/posts"] = { _ in
return PostHandler()
}
}
class GetPostHandler: RequestHandler {
func handleRequest(request: WebRequest, response: WebResponse) {
response.appendBodyString("get posts")
response.requestCompletedCallback()
}
}
class PostHandler: RequestHandler {
func handleRequest(request: WebRequest, response: WebResponse) {
response.appendBodyString("creating post")
response.requestCompletedCallback()
}
}
在构建服务的不同方面时,您可以在命令行中使用 cURL 或其他 REST 测试工具(例如 Postman
)对其进行测试
如果您想更深入地了解如何与 SQLite 数据库集成或创建一个与您的新服务器通信的应用程序,请查看本文顶部的教程 post。
只需将示例项目之一中的所有文件复制到您的 git 存储库:
https://github.com/PerfectExamples
将所有文件(您复制的)中的 example_project_name 重命名为您的项目名称。
在航站楼 运行
swift package generate-xcodeproj
您将获得一个具有所需名称的完美项目。
我建议像其他人建议的那样远离模板,并自己创建一个干净的项目。
创建此文件夹结构:
MyAPI
├── Package.swift
└── Sources
└── main.swift
然后,在Package.swift文件中
import PackageDescription
let package = Package(
name: "MyAPI",
targets: [],
dependencies: [
.Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", majorVersion: 2)
]
)
和 main.swift 文件:
import PerfectHTTP
import PerfectHTTPServer
do {
let route = Route(method: .get, uri: "/hello", handler: { (request: HTTPRequest, response: HTTPResponse) in
response.appendBody(string: "world!")
response.completed()
})
try HTTPServer.launch(.server(name: "localhost", port: 8080, routes: [route]))
} catch {
fatalError("\(error)")
}
转到命令行 运行:
swift package generate-xcodeproj
打开生成的项目文件:
MyAPI.xcodeproj
更改活动方案,然后构建并运行:
在 Safari 中打开:
http://localhost:8080/hello
Perfect 是一个新的 Swift 框架,用于在 swift 中创建 web/http 服务器。文档还没有,我发现从头开始构建一个新项目很麻烦。我不知道需要导入哪些框架,哪个是应用程序的入口点。 main.swift 等...
我想创建一个新的 xcworkspace 来放置我的项目,"a hello world server"。
我试图解决的问题:
- 必须包含哪些框架?
- Perfect服务器应该如何创建,app的入口点是什么?
- 如何创建以 "Hello World message" 响应的 "hello" 根?
- 我应该如何为服务器创建目标并最终 运行 服务器?
我不确定您是否找到了解决方案,但我就是这样做的:
'Tap Tracker' 应用程序是使用 Perfect 库编写的应用程序,因此即使文档尚未准备好,您仍然可以剖析该应用程序。我重命名了应用程序和 classes/methods。有一个 index.html,我将其移至 'www' 根,然后使用 TTHandler 重新路由视图以尝试制作标准布局。它不能很好地工作,因为框架太年轻了,但是可以做到。我会更具体,但我暂时回到 rails 因为我想等到它更成熟一点。
乱搞很有趣,我可能会在完美的基础上编写自己的库 onc 功能创新平静下来,我可以用它做出稳定的东西。
我设法写了一个关于这个的“Hello World”指南。 http://code-me-dirty.blogspot.co.uk/2016/02/creating-perfect-swift-server.html
简而言之,您需要这样进行:
克隆原始项目
创建新工作区
新建项目
导入PerfectLib.xcodeproject & 导入PerfectServer.xcodeproject但不复制
设置您的项目方案以启动 PerfectServer HTTP 应用程序
Link“Linked 框架和库”部分的 PerfectLib
设置框架目标的构建设置*
创建PerfectHandlers.swift并粘贴(最好写出感觉)下面的代码
import PerfectLib //public method that is being called by the server framework to initialise your module. public func PerfectServerModuleInit() { // Install the built-in routing handler. // Using this system is optional and you could install your own system if desired. Routing.Handler.registerGlobally() // Create Routes Routing.Routes["GET", ["/", "index.html"] ] = { (_:WebResponse) in return IndexHandler() } // Check the console to see the logical structure of what was installed. print("\(Routing.Routes.description)") } //Create a handler for index Route class IndexHandler: RequestHandler { func handleRequest(request: WebRequest, response: WebResponse) { response.appendBodyString("Hello World") response.requestCompletedCallback() } }
那么你就可以运行了。在我的博客上,我有一个较长、更详细的版本,如有必要,我会在这里更新。
构建设置
- 部署位置:是
- 安装构建产品位置:$(CONFIGURATION_BUILD_DIR)
- 安装目录:/PerfectLibraries
- 跳过安装:否
我刚刚写了一个教程,我想作为另一个解决方案分享,它概述了如何使用 Perfect 创建 Web 服务以及与之交互的应用程序。
http://chrismanahan.com/creating-a-web-service-swift-perfect
总结
- 您的项目必须在工作区中。此工作区还应包括 PerfectServer 和 PerfectLib 项目。
- 在您的项目中,创建一个新的 OSX 框架目标。这将是您的服务器目标
Link PerfectLib 同时包含您的服务器目标和您的应用程序目标(如果您正在与服务器一起构建应用程序)
编辑服务器的 运行 方案以使用 PerfectServer HTTP App 启动。
在服务器目标的构建设置中,设置以下标志:
- 跳过安装 = 否
- 部署位置=是
- 安装目录=/PerfectLibraries
- 安装构建产品位置 = $(CONFIGURATION_BUILD_DIR)
在服务器的文件夹中创建一个新文件。该文件将处理传入的请求。包括 [大部分] 以下内容:
import PerfectLib // This function is required. The Perfect framework expects to find this function // to do initialization public func PerfectServerModuleInit() { // Install the built-in routing handler. // This is required by Perfect to initialize everything Routing.Handler.registerGlobally() // These two routes are specific to the tutorial in the link above. // This is where you would register your own endpoints. // Take a look at the docs for the Routes API to better understand // everything you can do here // register a route for gettings posts Routing.Routes["GET", "/posts"] = { _ in return GetPostHandler() } // register a route for creating a new post Routing.Routes["POST", "/posts"] = { _ in return PostHandler() } } class GetPostHandler: RequestHandler { func handleRequest(request: WebRequest, response: WebResponse) { response.appendBodyString("get posts") response.requestCompletedCallback() } } class PostHandler: RequestHandler { func handleRequest(request: WebRequest, response: WebResponse) { response.appendBodyString("creating post") response.requestCompletedCallback() } }
在构建服务的不同方面时,您可以在命令行中使用 cURL 或其他 REST 测试工具(例如 Postman
)对其进行测试如果您想更深入地了解如何与 SQLite 数据库集成或创建一个与您的新服务器通信的应用程序,请查看本文顶部的教程 post。
只需将示例项目之一中的所有文件复制到您的 git 存储库: https://github.com/PerfectExamples
将所有文件(您复制的)中的 example_project_name 重命名为您的项目名称。
在航站楼 运行
swift package generate-xcodeproj
您将获得一个具有所需名称的完美项目。
我建议像其他人建议的那样远离模板,并自己创建一个干净的项目。
创建此文件夹结构:
MyAPI
├── Package.swift
└── Sources
└── main.swift
然后,在Package.swift文件中
import PackageDescription
let package = Package(
name: "MyAPI",
targets: [],
dependencies: [
.Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", majorVersion: 2)
]
)
和 main.swift 文件:
import PerfectHTTP
import PerfectHTTPServer
do {
let route = Route(method: .get, uri: "/hello", handler: { (request: HTTPRequest, response: HTTPResponse) in
response.appendBody(string: "world!")
response.completed()
})
try HTTPServer.launch(.server(name: "localhost", port: 8080, routes: [route]))
} catch {
fatalError("\(error)")
}
转到命令行 运行:
swift package generate-xcodeproj
打开生成的项目文件:
MyAPI.xcodeproj
更改活动方案,然后构建并运行:
在 Safari 中打开:
http://localhost:8080/hello