使用 Play 构建 RESTful API
使用 Play 控制器设计并实现 RESTful 端点、处理请求,以及管理 JSON 数据。
使用 Play 构建 RESTful API 是 CoddyKit 上的免费 Scala for Backend Engineering & Functional Programming 课时。 这是第 2 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Scala for Backend Engineering & Functional Programming 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Scala for Backend Engineering & Functional Programming 课程共包含 3 节课。
Play REST API 简介
欢迎!本课程将深入介绍如何使用 Scala Play 框架构建 RESTful API。REST(表述性状态转移)是一种广泛用于设计网络应用程序的架构风格。
RESTful API 允许不同的软件系统通过互联网相互通信,通常使用 GET、POST、PUT 和 DELETE 等标准 HTTP 方法来操作资源。
Play 控制器与操作
在 Play 中,传入的 HTTP 请求由控制器处理。控制器是包含操作方法的 Scala 对象或类。
每个操作方法负责处理特定类型的请求(例如获取数据或创建新项目),并返回 HTTP 响应。
在 Play 中定义路由
Play 使用 conf/routes 文件,将传入的 HTTP 请求映射到特定的控制器操作方法。您可以在这里定义 API 的端点。
路由条目的基本语法是:HTTP_METHOD /path controllers.ControllerName.actionMethod(parameters)。
实现 GET 端点
让我们创建一个返回问候语的简单 GET 端点。在实际的 Play 应用程序中,这段代码会位于控制器内部。这里,我们在 main 方法中模拟其逻辑。
请尝试运行此示例:
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")
}
}提取路径参数
您经常需要从 URL 路径中提取动态值,例如项目 ID。这些值称为路径参数。
在 routes 文件中,您可以使用冒号(:)定义它们。在控制器操作中,您需要将它们声明为方法参数。
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")
}
}请求正文与 JSON
在创建或更新资源时,客户端会在请求正文中发送数据。对于 RESTful API,这些数据几乎总是采用 JSON(JavaScript 对象表示法)格式。
Play 为解析 JSON 请求正文并将其转换为 Scala case class 提供了出色的支持。
构建 POST 端点
让我们模拟一个接收 JSON 正文的 POST 端点。在实际的 Play 应用程序中,您会使用 Play 的 JSON 库来解析请求。在这个可运行的示例中,我们将检查简单的字符串内容。
请尝试运行此示例:
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)}")
}
}处理 PUT 和 DELETE
除了 GET 和 POST 之外,RESTful API 还经常使用:
- PUT:用于更新现有资源。通常需要路径参数(ID)和请求正文(更新后的数据)。
- DELETE:用于删除资源。通常只需要路径参数(ID)。
为 PUT 和 DELETE 定义路由以及访问参数和正文的方式,与 POST 和 GET 类似。
返回 JSON 响应
处理请求后,您的 API 通常需要返回响应,响应通常采用 JSON 格式。Play 让您可以轻松构建 JSON 对象并将其返回。
在控制器中,您通常会使用 Ok(Json.toJson(yourCaseClass))。这里,我们将模拟创建一个 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)}")
}
}路由匹配测验
哪个 Play 路由定义能够正确匹配请求 GET /api/products/123,并将 123 作为 Int 传递给控制器操作?
回顾与后续步骤
做得很好!您已经学习了使用 Play Framework 构建 RESTful API 的基础知识:
- 了解 RESTful 原则和 HTTP 方法。
- 了解 Play 控制器和操作如何处理请求。
- 定义 API 路由,将 URL 映射到控制器操作。
- 从 URL 中提取路径参数。
- 处理 POST/PUT 的 JSON 请求体。
- 构造并返回 JSON 响应。
接下来,您可以探索如何将数据库集成到 Play 应用程序中!
用 AI 导师学习 Scala — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 39
- 课程
- 143
常见问题解答
「使用 Play 构建 RESTful API」课时是免费的吗?
是的 — 「使用 Play 构建 RESTful API」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Scala for Backend Engineering & Functional Programming 课程的其余内容,请升级到 CoddyKit PRO。 Scala for Backend Engineering & Functional Programming 课程共包含 3 节课。
「使用 Play 构建 RESTful API」这节课中我会学到什么?
使用 Play 控制器设计并实现 RESTful 端点、处理请求,以及管理 JSON 数据。 你通过在浏览器中直接运行的动手代码来练习 Scala for Backend Engineering & Functional Programming,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Scala for Backend Engineering & Functional Programming 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Scala for Backend Engineering & Functional Programming 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 3 节。
「使用 Play 构建 RESTful API」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Scala for Backend Engineering & Functional Programming 课中编写并运行代码吗?
能。每节 Scala for Backend Engineering & Functional Programming 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Play Framework 基础
- 使用 Play 构建 RESTful API
- 使用 Slick/Doobie 集成数据库