0Pricing
Scala for Backend Engineering & Functional Programming · Lezione

Creazione di API RESTful con Play

Progetti e implementi endpoint RESTful, gestisca le richieste e amministri i dati JSON con i controller di Play.

Creazione di API RESTful con Play è una lezione Scala for Backend Engineering & Functional Programming gratuita su CoddyKit. Questa è la lezione 2 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Scala for Backend Engineering & Functional Programming, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Scala for Backend Engineering & Functional Programming include 3 lezioni in totale.

Introduzione alle API REST di Play

Benvenuto! In questa lezione approfondiremo la creazione di API RESTful utilizzando Scala Play Framework. REST (Representational State Transfer) è uno stile architetturale ampiamente utilizzato per progettare applicazioni in rete.

Un'API RESTful consente a diversi sistemi software di comunicare tra loro via Internet, in genere utilizzando metodi HTTP standard come GET, POST, PUT e DELETE per eseguire operazioni sulle risorse.

Controller e azioni di Play

In Play, le richieste HTTP in arrivo vengono gestite dai controller. Un controller è un oggetto o una classe Scala che contiene metodi di azione.

Ogni metodo di azione è responsabile dell'elaborazione di un tipo specifico di richiesta (ad esempio il recupero di dati o la creazione di un nuovo elemento) e della restituzione di una risposta HTTP.

Definizione delle route in Play

Play utilizza un file conf/routes per associare le richieste HTTP in arrivo a specifici metodi di azione dei controller. Qui si definiscono gli endpoint dell'API.

La sintassi di base di una voce di route è: HTTP_METHOD /path controllers.ControllerName.actionMethod(parameters).

Implementazione di un endpoint GET

Creiamo un semplice endpoint GET che restituisce un messaggio di saluto. In una vera applicazione Play, questo si troverebbe all'interno di un controller. Qui simuleremo la logica in un metodo main.

Provi a eseguire questo esempio:

object GreetingController {
  // This method simulates a Play controller action
  def sayHello(): String = {
    "Hello from your Play API!"
  }
  
  def main(args: Array[String]): Unit = {
    // Simulate receiving a request and calling the action
    val apiResponse = sayHello()
    println(s"Simulated API Response: $apiResponse")
  }
}

Estrazione dei parametri del percorso

Spesso è necessario estrarre valori dinamici dal percorso URL, come l'ID di un elemento. Questi vengono chiamati parametri del percorso.

Nel file routes, li definisce con i due punti (:). Nell'azione del controller, li dichiara come parametri del metodo.

object UserController {
  // This action takes an 'id' as a path parameter
  def getUser(id: Int): String = {
    s"Fetching user details for ID: $id"
  }
  
  def main(args: Array[String]): Unit = {
    // Simulate a request to /users/123
    val userIdFromRequest = 123
    val apiResponse = getUser(userIdFromRequest)
    println(s"Simulated API Response: $apiResponse")
  }
}

Corpi delle richieste e JSON

Per creare o aggiornare risorse, i client inviano dati nel corpo della richiesta. Nelle API RESTful, questi dati sono quasi sempre in formato JSON (JavaScript Object Notation).

Play offre un eccellente supporto per analizzare i corpi delle richieste JSON e convertirli in case class Scala.

Creazione di un endpoint POST

Simuliamo un endpoint POST che riceve un corpo JSON. In una vera applicazione Play, utilizzerebbe la libreria JSON di Play per analizzare la richiesta. In questo esempio eseguibile, verificheremo la presenza di semplici contenuti stringa.

Provi a eseguire questo esempio:

object ItemController {
  // Simulate processing a JSON request body
  def createItem(jsonBody: String): String = {
    // In a real Play app: Json.parse(jsonBody).as[ItemCaseClass]
    if (jsonBody.contains("name") && jsonBody.contains("price")) {
      s"Item successfully created! Data: $jsonBody"
    } else {
      "Error: Invalid JSON format. 'name' and 'price' expected."
    }
  }
  
  def main(args: Array[String]): Unit = {
    // Simulate a POST request with a JSON body
    val validJson = """{"name": "Smartphone", "price": 799.99}"""
    println(s"Valid JSON Response: ${createItem(validJson)}")
    
    val invalidJson = """{"product": "Tablet"}"""
    println(s"Invalid JSON Response: ${createItem(invalidJson)}")
  }
}

Gestione di PUT e DELETE

Oltre a GET e POST, le API RESTful utilizzano comunemente:

  • PUT: per aggiornare una risorsa esistente. Di solito richiede un parametro del percorso (ID) e un corpo della richiesta (dati aggiornati).
  • DELETE: per rimuovere una risorsa. In genere richiede solo un parametro del percorso (ID).

I modelli per definire le route e accedere ai parametri o ai corpi delle richieste per PUT e DELETE sono simili a quelli di POST e GET.

Restituzione di risposte JSON

Dopo aver elaborato una richiesta, l'API deve generalmente inviare una risposta, spesso in formato JSON. Play semplifica la costruzione degli oggetti JSON e il loro invio.

In un controller, in genere si utilizza Ok(Json.toJson(yourCaseClass)). Qui simuleremo la creazione di una stringa JSON.

object ResponseGenerator {
  // Simulate a case class for the response data
  case class ApiResponse(status: String, message: String)

  // Simulate converting the case class to a JSON string
  def buildJsonResponse(response: ApiResponse): String = {
    s"""{"status": "${response.status}", "message": "${response.message}"}"""
  }

  def main(args: Array[String]): Unit = {
    val successResponse = ApiResponse("success", "Data retrieved successfully")
    println(s"Simulated JSON Output:\n${buildJsonResponse(successResponse)}")

    val errorResponse = ApiResponse("error", "Item not found")
    println(s"Simulated JSON Output:\n${buildJsonResponse(errorResponse)}")
  }
}

Quiz sulla corrispondenza delle route

Quale definizione di route di Play corrisponderebbe correttamente a una richiesta GET /api/products/123 e passerebbe 123 come Int all'azione del controller?

Riepilogo e prossimi passi

Ottimo lavoro! Ha appreso i fondamenti della creazione di API RESTful con Play Framework:

  • Comprendere i principi RESTful e i metodi HTTP.
  • Come i controller e le azioni di Play elaborano le richieste.
  • Definire le route delle API per associare gli URL alle azioni dei controller.
  • Estrarre i parametri del percorso dagli URL.
  • Gestire i corpi delle richieste JSON per POST/PUT.
  • Costruire e restituire risposte JSON.

Come prossimo passo, potrebbe esplorare l'integrazione dei database nella sua applicazione Play!

Domande Frequenti

La lezione «Creazione di API RESTful con Play» è gratuita?

Sì — il testo completo di «Creazione di API RESTful con Play» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Scala for Backend Engineering & Functional Programming, passa a CoddyKit PRO. Il corso Scala for Backend Engineering & Functional Programming include 3 lezioni in totale.

Cosa imparerò in «Creazione di API RESTful con Play»?

Progetti e implementi endpoint RESTful, gestisca le richieste e amministri i dati JSON con i controller di Play. Eserciti Scala for Backend Engineering & Functional Programming con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Scala for Backend Engineering & Functional Programming?

Non è richiesta alcuna esperienza precedente. Scala for Backend Engineering & Functional Programming su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 3.

Quanto tempo richiede la lezione «Creazione di API RESTful con Play»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Scala for Backend Engineering & Functional Programming?

Sì. Ogni lezione Scala for Backend Engineering & Functional Programming include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Fondamenti di Play Framework
  2. Creazione di API RESTful con Play
  3. Integrazione dei database con Slick/Doobie
← Torna a Scala for Backend Engineering & Functional Programming