Tutorial: Cómo configurar un proyecto Vapor 2

Al final de este tutorial, podrá configurar un proyecto de vapor e implementar una ruta simple que devuelva una cadena / número / json :)

Puedes encontrar el resultado de este tutorial en github aquí

1. Instalar Xcode

Con Xcode tendrás instalado de forma automática Swift. Vaya a descargar Xcode desde la App Store. Y termine la instalación abriendo Xcode y siguiendo las instrucciones.

2. Verifique la compatibilidad de Vapor 2

Cuando termine de instalar, verifiquemos que su sistema esté listo ahora para Vapor 2 ejecutando lo siguiente en su terminal:

eval "$ (curl -sL check.vapor.sh)"

Deberías obtener:

 Compatible con Vapor 2

3. Instale la caja de herramientas Vapor

Antes de crear nuestro primer proyecto Vapor, permítanos instalar una interfaz de línea de comandos (cli) súper conveniente que nos ayudará mucho en el futuro. La única caja de herramientas de Vapor.

Instalaremos Vapor toolbox a través de Homebrew. Si aún no lo tiene, le recomiendo que lo obtenga. Hace que sea muy fácil instalar dependencias que definitivamente necesitará más adelante cuando cree proyectos más grandes con Vapor. Para la instalación, ejecute lo siguiente en su terminal:

/ usr / bin / ruby ​​-e "$ (curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Ahora agregue Homebrew Tap y finalmente podremos instalar Vapor toolbox

brew tap vapor / homebrew-tap
actualización de preparación
preparar instalar vapor

4. Crea tu primer proyecto Vapor

Ahora que tiene la caja de herramientas Vapor, crear un nuevo proyecto es tan simple como escribir:

vapor nuevo yourProjectName --branch = vapor-2

Esto creará un nuevo proyecto basado en la plantilla api que puedes encontrar en el repositorio de Vapor en Github aquí. Siguiente paso: generar un proyecto Xcode, desde su proyecto yourProjectName / ejecute lo siguiente:

vapor xcode -y

Esto puede llevar un tiempo ... pero generará el proyecto Xcode y lo abrirá por usted (gracias caja de herramientas de vapor ).

5. Limpiar archivos innecesarios + código

Debería tener una estructura de proyecto como esta ahora:

yourProjectName /
├── Package.swift
├── Fuentes /
│ ├── Aplicación /
│ │ ├── Controladores /
│ │ │ └── PostController.swift
│ │ ├── Modelos /
│ │ │ └── Post.swift
│ │ ├── Rutas /
│ │ │ └── Routes.swift
│ │ └── Configuración /
│ │ ├── Config + Setup.swift
│ │ └── Droplet + Setup.swift
│ └── Ejecutar /
├── Pruebas /
├── Config /
├── Público /
├── Dependencias /
└── Productos /

Me gusta eliminar (mover a la papelera) todo lo que no es importante por ahora o estamos a punto de implementar por nuestra cuenta. De esa manera, quiero asegurarme de que sepamos lo que hacemos, necesitamos y usamos para obtener una mejor comprensión .

yourProjectName /
├── Package.swift
├── Fuentes /
│ ├── Aplicación /
│ │ ├── Controladores /
│ │ │ └── PostController.swift // eliminar
│ │ ├── Modelos /
│ │ │ └── Post.swift // eliminar
│ │ ├── Rutas /
│ │ │ └── Routes.swift
│ │ └── Configuración /
│ │ ├── Config + Setup.swift
│ │ └── Droplet + Setup.swift
│ └── Ejecutar /
├── Pruebas /
├── Config /
├── Público /
├── Dependencias /
└── Productos /
Nota: Si desea obtener más información sobre los Controladores y Modelos, también escribí tutoriales sobre ellos: Controladores y Modelos

Siguiente: elimine desde Setup / Config + Setup.swift las siguientes líneas:

import FluentProvider // eliminar
extensión Config {
  public func setup () lanza {
    Node.fuzzy = [Row.self, JSON.self, Node.self] // eliminar
    
    pruebe setupProviders ()
    pruebe setupPreparations ()
  }
La función privada setupProviders () arroja {
    pruebe addProvider (FluentProvider.Provider.self) // eliminar
  }
configuración de funciones privadasPreparations () lanza {
    preparaciones.append (Post.self) // eliminar
  }
}

Desde Config / droplet.json elimine la cadena "preparar":

...
"comandos": [
  "preparar" // eliminar
]
...

Dentro de Package.swift, elimine el FluentProvider:

// swift-tools-version: 4.0
importar PackageDescription
let package = Paquete (
  nombre: "mi-primera-ruta",
  productos: [
    .library (nombre: "Aplicación", objetivos: ["Aplicación"]),
    .executable (nombre: "Ejecutar", objetivos: ["Ejecutar"])
  ],
  dependencias: [
    .package (url: "https://github.com/vapor/vapor.git", .upToNextMajor (de: "2.1.0")), // no olvide eliminar esa coma 
    .package (url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor (de: "1.2.0")), // eliminar
  ],
  objetivos: [
    .target (nombre: "Aplicación", dependencias: ["Vapor", "FluentProvider"],
      excluir: [
        "Config",
        "Público",
        "Recursos",
    ]),
    .target (nombre: "Ejecutar", dependencias: ["Aplicación"]),
    .testTarget (nombre: "AppTests", dependencias: ["App", "Testing"])
  ]
)

Y todo, desde Routes / Routes.swift, así:

extensión Droplet {
  func setupRoutes () arroja {
    ... // eliminar todo dentro de este cuerpo de función
  }
}

Para que se apliquen nuestros cambios o eliminaciones, debemos ejecutar en nuestra terminal:

actualización de vapor -y

6. ¡Implementa tu primera ruta!

Existen varios métodos HTTP entre los cuales GET, POST, PUT y PATCH son probablemente los más conocidos. Queremos OBTENER datos, por ejemplo, una cadena. Tal vez tu nombre? O OBTENGA un número. Tal vez tu edad?

Implementemos nuestra primera ruta GET insertando en Routes / Routes.swift:

extensión Droplet {
  func setupRoutes () arroja {
    get ("nombre") {req in
      volver "Ethan Hunt"
    }
  }
}

Al utilizar la función get ("nombre") definiríamos que esta ruta es accesible si se solicita a través de GET en la url / nombre.

Si ahora presiona cmd + r o el botón de reproducción en la parte superior de Xcode, se iniciará la aplicación en localhost con el puerto 8080. Con la ruta dada, puede obtener el nombre en su navegador ahora en: 127.0.0.1:8080/name .

Nota: asegúrese de seleccionar Ejecutar como un esquema junto a su botón antes de ejecutar la aplicación
Nota: El puerto desde el que puede acceder a su aplicación se define en Config / server.swift: puede cambiarlo a su gusto y volver a ejecutar la aplicación :)

Puede agregar más rutas y probar más, como devolver un número o json:

extensión Droplet {
  func setupRoutes () arroja {
    get ("nombre") {req in
      volver "Ethan Hunt"
    }
    get ("age") {req in
      volver "\ (23)"
    }
    get ("json") {req in
      return try JSON (nodo: ["nombre": "Martin J. Lasek", "edad": 26])
    }
  }
}

No olvide ejecutar o cmd + r en Xcode después de cada cambio en el código para volver a compilarlo y poder ver los resultados en su navegador

¡Eso es! ¡Implementaste con éxito tu primer proyecto Vapor !

Muchas gracias por leer! Si tiene alguna sugerencia o mejora, ¡hágamelo saber! ¡Me encantaría saber de ti!

Twitter / Github / Instagram