Swift 방식 웹 프레임워크 Vapor의 Dropet는 무엇입니까?

10194 단어 SwiftVapor

이른바 Vapor


Vapor는 Swift 방식의 웹 프레임워크입니다.
공식 링크: https://vapor.codes/
보관소: https://github.com/vapor/vapor

저는 Dropet이라는 녀석이 마음에 들어요.


전혀 접해보지 않은 상태에서 advent 달력에 초대받은 것이기 때문에 문서를 먼저 보면 Dropet이라는 단어가 나오기 때문에 찾아봤어요.
단순히 영어의 뜻을 몰라서 찾아봤는데
Dropet: 방울(물방울)
라는 뜻이다.Vapor(스팀)을 구성하는 요소라 드롭=방울을 만드는 거죠...?선생✨

Dropet은 서비스 컨테이너입니다.


공식 문서에서 Dropet은 서비스 용기에서 루트, 서버 시작, 중간부품의 추가 등을 책임진다고 적혀 있다.
The Droplet is a service container that gives you access to many of Vapor's facilities. It is responsible for registering routes, starting the server, appending middleware, and more.
(역시 Vaper(스팀) 그래서 방울로 되어있어요.

사용법


다음은 구체적인 용례와 함께 Dropet의 구조를 이해할 것이다.
(코드는 공식 문서를 직접 사용했다

초기화


main.swift
import Vapor

let drop = try Droplet()

// 何かしらの設定

try drop.run()
단순히 Vapor를 이용하고 싶을 뿐이라면 그것만으로도 OK.

환경별로 설정하고 싶어요.


main.swift
if drop.config.environment == .production {
    ...
}
위에서 말한 바와 같이 환경에 따라 개발자먼트,testing,production 등 다양한 부분을 설명할 수 있다.
또한 환경 변수를 다음과 같이 전환하여 시작할 수 있습니다.(기본값은 development)
vapor run serve --env=production

환경별로 로그를 내고 싶어요.


예를 들어 정식 전송 중 오류가 발생한 경우에만 혼자의logger를 이용하려고 할 때 다음과 같이 코드를 기술한다
main.swift
let config = try Config()
config.addConfigurable(log: MyEmailLogger.init, name: "email")

let drop = Droplet(config)
정식 공연의 드롭렛.jsonConfig/production/droplet.json에서 다음과 같이 설정합니다.
{
    "log": "email"
}
일지 이외에 생각하다서버와 cipher 등도 설정할 수 있습니다.

각 환경에 대해 서버의 포트 번호 등을 설정하고 싶습니다.


다음과 같이 config["jsonファイル名", "プロパティ名"]에서 설정치를 추출할 수 있습니다.
main.swift
final class MyServer: ServerProtocol {
    let host: String
    let port: Int

    init(_ host: String, _ port: Int) {
        self.host = host
        self.port = port
    }
}

extension MyServer: ConfigInitializable {
    convenience init(config: Config) throws {
        // config["jsonファイル名", "プロパティ名"] で値を取り出せる
        let host = config["server", "host"]?.string ?? "127.0.0.1"
        let port = config["server", "port"]?.int ?? 8080

        self.init(host, port)
    }
}
그리고 각 환경에 따라 다음과 같은 json 파일을 준비하면 설정이 자동으로 전환됩니다.
Config/production/server.json
{
    "host": "0.0.0.0",
    "port": 8080
}
Config/development/server.json
{
    "host": "127.0.0.1",
    "port": 9000
}

MySQL 사용 시 실제 설정


최초로 MySQLProvider의 물건을 제공하였다.(사전 준비가 필요하다하지만 생략)
다음과 같이 기술하다.
main.swift
import Vapor
import MySQLProvider

let config = try Config()
try config.addProvider(MySQLProvider.Provider.self)

let drop = try Droplet(config)

...
flument(swift 같은 ORM)와 MySQL 관계의 설정 json만 준비하면 OK!
Config/fluent.json
{
    "driver": "mysql"
}
Config/mysql.json
{
    "hostname": "127.0.0.1",
    "user": "root",
    "password": "password",
    "database": "hello"
}
앞에서 기재한 바와 같이 모든 설정은 내부에서 json을 읽어서 설정한 것이므로 반드시 이렇다.
그렇구나, 잘했어...

총결산

  • Dropet은 Vapor로 구성된 응용 서비스 용기
  • 환경에 맞게 구성 가능
  • 사용자 지정 값
  • 도 설정할 수 있습니다.
  • 표준 Provider의 설정도 Dropet을 통해 하는 것 같다
  • json에 설정을 쓰면 기본적으로 방법이 떠오른다
  • 좋은 웹페이지 즐겨찾기