playground-sessions/php-code-exercise

API 编码练习。

v1.0.2 2021-02-12 22:41 UTC

This package is auto-updated.

Last update: 2024-09-27 03:08:12 UTC


README

场景

考虑以下假设情况。

我们正在为教师开发一个iOS和Android应用程序。教师可以选择一个学生,查看所有课程,并查看该学生是否完成了每门课程。

每个应用程序将从一个JSON REST API端点获取其数据。

/student-progress/{userId}

其中 {userId} 是学生的用户ID。

你继承了此代码库。

你记得数据是如何结构的。

  • 课程包含多个段落。
  • 用户可以为段落创建练习记录。

你检查了代码库,并发现此端点存在几个问题。

  1. 业务规则(例如,用户是否完成了课程)将被每个应用程序重复。
  2. 即使是有合理数量的练习记录,它也过于缓慢。

幸运的是,两位前端开发人员都同意在投入使用之前需要更改端点。你们都同意以下响应数据结构。

{
  "lessons": [
    {
      "id": 32,
      "difficulty": "Rookie",
      "isComplete": true
    }
  ]
}

说明

使用此代码库解决所有问题。

  • 创建新的响应数据结构。
  • 将以下业务规则编码化。
    • 如果每个段落至少有一个得分80%或以上的练习记录,则课程完成。
    • 难度类别(“新手”、“中级”、“高级”)分别与难度数字[1,2,3]、[4,5,6]、[7,8,9]关联。
  • 确保用户ID 1的响应时间在500ms以下,对于给定的数据集。现在响应时间约为2秒。

根据单一职责原则(SRP),代码应干净地编写成独立的部分,每个部分都只有一个职责。例如,应用程序逻辑(例如,从URL中提取查询参数)应与业务逻辑(例如,确定课程是否完成)分开。

你可以完全控制代码库。你可以添加或删除你喜欢的任何包。一切皆有可能。

我们正在测试你组织代码的能力,以及SRP,而不是你关于Laravel/Lumen框架的知识。

尽量频繁提交,并且更改小,这样我们可以看到你在做什么。

如果你有特定的优势(比如API文档),请尽情展示。

你可能知道,所有三个问题都可以在不使用缓存的情况下解决。

交付物

通过电子邮件 ben@playgroundsessions.com 发送链接到你的git仓库。

入门

使用PHP内置的Web服务器,入门非常简单。

  1. 安装PHP 8.0。
  2. 遵循开发环境设置

开始吧!

我们期待看到你的代码!