Как сделать новый идеальный проект с нуля (Swift server) в xcode?

Perfect-это новая платформа Swift для создания веб-сервера / http в swift. Документация еще не существует, и я нахожу проблемы с построением нового проекта с нуля. Я не знаю, какие фреймворки необходимо импортировать, и какой из них является точкой входа приложения. главный.swift и др...

Я хотел бы сделать новое xcworkspace, в котором будет мой проект "сервер hello world".

проблемы, которые я пытаюсь решить:

  • какие рамки должны быть включенным?
  • как я должен создать идеальный сервер, какова точка входа в приложение?
  • как создать корень" hello", который отвечает "Hello World message"?
  • как я должен сделать цель для сервера и в конечном итоге запустить сервер?

5 ответов


мне удалось написать руководство "Hello World" об этом. http://code-me-dirty.blogspot.co.uk/2016/02/creating-perfect-swift-server.html

в двух словах, вам нужно действовать следующим образом:

  1. клонировать исходный проект
  2. создать новое рабочее пространство
  3. создать новый проект
  4. Импорт PerfectLib.xcodeproject & Import PerfectServer.xcodeproject, но не копировать
  5. настройте схему проекта на запустите приложение PERFECTSERVER HTTP
  6. свяжите PerfectLib onn в разделе" Связанные фреймворки и библиотеки"
  7. настройка параметров сборки для вашей целевой платформы*
  8. Создать 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 и приложение для взаимодействия с ним.

http://chrismanahan.com/creating-a-web-service-swift-perfect

резюме

  1. вы должны иметь свой проект в рабочей области. Эта рабочая область также должна включать проекты PerfectServer и PerfectLib.

workspace screenshot

  1. в вашем проекте создайте новую цель OSX Framework. Это будет ваш сервер target

creating a new target

  1. ссылка PerfectLib как с целью сервера, так и с целью вашего приложения (если вы создаете приложение Вместе с сервером)

  2. изменить схему запуска сервера для запуска с PERFECTSERVER HTTP App.

edit scheme scheme with executable

  1. в настройках сборки целевого сервера установите следующие флаги:

    • Пропустить Установку = Нет
    • Место Развертывания = Да
    • - Каталог Установки = /PerfectLibraries
    • расположение продуктов сборки установки = $(CONFIGURATION_BUILD_DIR)
  2. создать новый файл в папка сервера. Этот файл будет обрабатывать поступающие запросы. Включите [большинство] следующее:

    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, таких как почтальон

Если вы хотите погрузиться глубже и узнать, как интегрировать с базой данных SQLite или создать приложение, которое разговаривает с вашим новым сервером, ознакомьтесь с учебником в верхней части этого должность.


Я бы рекомендовал держаться подальше от шаблонов, как предлагали другие, и создать чистый проект самостоятельно.

создать следующую структуру папок:

MyAPI
├── Package.swift
└── Sources
    └── main.swift

затем в .Свифт!-Файл -12-->

import PackageDescription

let package = Package(
    name: "MyAPI",
    targets: [],
    dependencies: [
        .Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", majorVersion: 2)
    ]
)

и главное.Свифт файл:

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

измените активную схему, затем постройте и беги:

enter image description here

открыть в safari:

http://localhost:8080/hello

Я не уверен, нашли ли вы решение или нет, но это то, что я сделал:

приложение "Tap Tracker" - это приложение, написанное идеальными библиотеками, поэтому, даже если документация еще не готова, вы все равно можете препарировать приложение. Я переименовал приложение и классы/методы. Есть один индекс.html, который я переместил в корень "www", а затем перенаправил представление с помощью TTHandler, чтобы попытаться сделать стандартный макет. Это не очень хорошо работает, потому что рамки настолько молоды, но это может быть сделанный. Я бы гораздо больше, но я вернулся к рельсам, потому что я хочу подождать, пока он немного более зрелым.

Это весело возиться, и я, вероятно, напишу свою собственную библиотеку поверх совершенных инноваций onc feature успокаивается, и я могу сделать что-то стабильное с ним.


просто скопируйте все файлы из одного из примеров-проектов в репозиторий git: https://github.com/PerfectExamples

переименуйте example_project_name во всех файлах (которые вы скопировали) в имя вашего проекта.

в терминале run

swift package generate-xcodeproj

и вы получите идеальный проект с требуемым именем.