电脑装配网

AI编程:使用ChatGPT写代码创建一个REST API(C#)

 人阅读 | 作者pangding | 时间:2023-06-22 03:15

ChatGPT是由OpenAI创建的先进自然语言处理模型,OpenAI是由Elon Musk、Sam Altman和Greg Brockman创立的人工智能研究中心。该模型于2018年6月宣布推出,并不断进行修改和升级,最新版本GPT-3于2020年发布。ChatGPT是由GPT-3制作的,于2022年发布。ChatGPT中的“GPT”代表“Generative Pre-trained Transformer”,这是对该模型深度学习架构的引用。ChatGPT基本上使用大量的文本数据来“学习”人类语言的复杂性,从而使其能够创建回复,这些回复通常很难与人类的回复区分开来。ChatGPT技术基于一种称为Transformer的神经网络类型,该类型非常适合自然语言处理应用程序。

REST API是Representational State Transfer(表现层状态转移)的缩写。它是由Roy Fielding提出的,是用来描述创建HTTP API的标准方法的。REST API是一组关于如何构建Web应用程序API的架构规则、标准或指导,或者说REST API是遵循API原则的一种架构风格。REST API可以使用HTTP协议中已经定义的GET、POST、PUT和DELETE方法来实现对资源的操作。这些方法分别对应于对资源的查找、创建、更新和删除操作。

REST API在现代web和移动应用程序中被广泛使用,因为它们提供了在系统之间交换数据的标准化和高效方法。您通常可以通过阅读文档来了解有关特定API的更多信息。

在ChatGPT的帮助下,用c#创建一个功能完整的REST API来管理学生。

创建API

在本节中,我们将让ChatGPT编写一个功能齐全的REST API,用于管理学生,包括创建、删除和修改学生记录。为此,我们应该有一个“students controller,”,它具有API端点,还有一个“students class”,它具有所需的字段,如“Id”、“name”和“age”。我们在这里的唯一工作是创建逻辑的、结构良好的查询,随着我们逐步构建API,查询将变得越来越复杂。

在chatGPT中输入:

Write a REST API for Managing Students in C#

下面是一个用c#管理学生的RESTful API示例。这个API将使用HTTP方法GET、POST、PUT和DELETE对学生资源列表执行CRUD(创建、读取、更新、删除)操作。

GPT生成代码如下:

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Http;using System.Web.Http;namespace StudentManagement.Controllers{ public class StudentController : ApiController { // GET api/student public IEnumerable<Student> Get() { return new List<Student> { new Student { Id = 1, Name = "John Doe", Age = 20 }, new Student { Id = 2, Name = "Jane Doe", Age = 22 }, new Student { Id = 3, Name = "Bob Smith", Age = 25 } }; } // GET api/student/5 public Student Get(int id) { return new Student { Id = id, Name = "John Doe", Age = 20 }; } // POST api/student public void Post([FromBody]Student value) { // Add student to database } // PUT api/student/5 public void Put(int id, [FromBody]Student value) { // Update student in database } // DELETE api/student/5 public void Delete(int id) { // Delete student from database } } public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } }}

这个StudentsController类定义了以下endpoint:

GET /api/students:返回所有学生的列表。

GET /api/students/{id}:按id返回单个学生资源。

POST /api/students:创建新的学生资源。

PUT /api/students/{id}:按id更新现有的学生资源。

DELETE /api/students/{id}:根据id删除现有的学生资源。

注意:我们使用[FromBody]属性将请求体反序列化为CreateStudent和UpdateStudent方法的“Student Object”。

还要注意,学生列表是静态的,并使用一些示例数据进行了初始化。在实际场景中,此数据可能存储在数据库或其他持久性存储中。

最后,我们使用HTTP状态代码200 OK、201 Created、204 No Content和404 Not Found来指示每个操作的结果。

GPT中输入

Add More Properties to the Student Class,such as Email,Address ,City,State,Zipcode on

Student Class添加更多属性

public class Student{ public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public string Email { get; set; } public string Address { get; set; } public string City { get; set; } public string State { get; set; } public string ZipCode { get; set; }}

在这个类的更新版本中,我们添加了以下属性:

FirstName:学生的名字。

LastName:学生的姓氏。

Address:学生的街道地址。

City:学生居住的城市。

State:学生居住的州。

ZipCode:学生地址的邮政编码。

这些附加属性可以提供关于学生的更多信息,对于API中的筛选、排序和搜索操作非常有用。

Add Another Property to the Student Class

关于学生修过的科目

下面是“Student Class ”的更新版本,增加了学生所选科目的属性:

public class Student{ public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public string Email { get; set; } public string Address { get; set; } public string City { get; set; } public string State { get; set; } public string ZipCode { get; set; } public List<string> SubjectsTaken { get; set; }}

在这个类的更新版本中,我们添加了一个名为SubjectsTaken的属性,它是一个字符串列表,表示学生所选科目的名称。此属性可用于根据学生学习过的科目查询和过滤学生。

你可以像这样向列表中添加主题:

var student = new Student{ Id = 1, FirstName = "John", LastName = "Doe", Age = 20, Email = "john.doe@example.com", Address = "123 Main St", City = "Anytown", State = "CA", ZipCode = "12345", SubjectsTaken = new List<string> { "Math", "Science", "History" }};

并且,您可以像这样检索给定学生的科目列表:

var student = GetStudent(1);var subjects = student.SubjectsTaken;

输入:

Change SubjectTaken to an Object Named Subject Containing the Properties Id, Name, Teacher, and Credits

下面是“student类”的更新版本,其中SubjectsTaken属性被替换为一个包含Id、Name、Teacher和Credits属性的新对象subject:

public class Student{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public string State { get; set; } public string ZipCode { get; set; } public string Address { get; set; } public List<Subject> Subjects { get; set; }}public class Subject{ public int Id { get; set; } public string Name { get; set; } public string Teacher { get; set; } public int Credits { get; set; }

在这个类的更新版本中,我们用一个包含Id、Name、Teacher和Credits属性的新对象subject替换了SubjectsTaken属性。这种新的结构可以提供关于学生所修科目的更详细的信息,并且对于基于特定科目属性筛选和查询学生非常有用。

你可以像这样在SubjectsTaken列表中添加一个主题:

var student = new Student{ Id = 1, FirstName = "John", LastName = "Doe", Age = 20, Email = "john.doe@example.com", Address = "123 Main St", City = "Anytown", State = "CA", ZipCode = "12345", SubjectsTaken = new List<Subject> { new Subject { Id = 1, Name = "Math", Teacher = "Mr. Smith", Credits = 4 }, new Subject { Id = 2, Name = "Science", Teacher = "Ms. Jones", Credits = 3 } }};var student = GetStudent(1);var subjects = student.SubjectsTaken;

增加数据验证:

输入:Add Validation for Making the ID, FirstName, and Email Mandatory

public class Student{ private int _id; private string _firstName; private string _email; public int Id { get { return _id; } set { if (value <= 0) { throw new ArgumentException("Id must be greater than zero."); } _id = value; } } public string FirstName { get { return _firstName; } set { if (string.IsNullOrEmpty(value)) { throw new ArgumentException("First name cannot be null or empty."); } _firstName = value; } } public string LastName { get; set; } public int Age { get; set; } public string Email { get { return _email; } set { if (string.IsNullOrEmpty(value)) { throw new ArgumentException("Email cannot be null or empty."); } _email = value; } } public string Address { get; set; } public string City { get; set; } public State State { get; set; } public string ZipCode { get; set; } public List<Subject> SubjectsTaken { get; set; }}

自动创建修改成枚举属性:

输入:Change the State Property in the Student Class to Enum

public class Student{ public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public StateEnum State { get; set; } public string ZipCode { get; set; } public string Address { get; set; } public List<Subject> Subjects { get; set; }}public enum StateEnum{ Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware, Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana, Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana, Nebraska, Nevada, NewHampshire, NewJersey, NewMexico, NewYork, NorthCarolina, NorthDakota, Ohio, Oklahoma, Oregon, Pennsylvania, RhodeIsland, SouthCarolina, SouthDakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, WestVirginia, Wisconsin, }

自动创建异步方法代码:

比如输入:Make the Students Controller Asynchronous

chatGPT自动代码生成:

public class StudentsController : ApiController{ private readonly IStudentRepository _studentRepository; public StudentsController(IStudentRepository studentRepository) { _studentRepository = studentRepository; } // GET api/students public async Task<IEnumerable<Student>> Get() { return await _studentRepository.GetAllAsync(); } // GET api/students/5 public async Task<Student> Get(int id) { return await _studentRepository.GetByIdAsync(id); } // POST api/students public async Task Post(Student student) { await _studentRepository.AddAsync(student); } // PUT api/students/5 public async Task Put(int id, Student student) { student.Id = id; await _studentRepository.UpdateAsync(student); } // DELETE api/students/5 public async Task Delete(int id) { await _studentRepository.DeleteAsync(id); }}

结论

在本文中,我们使用ChatGPT构建了一个REST API,用于使用ASP.NET管理学生。NET Core和c#编程语言。这个API是一个web服务的基本实现,通过提供几个不同的端点,实现了用于管理学生列表的CRUD(创建、读取、更新、删除)操作。ChatGPT能够向学生类添加基本的验证,以及使代码异步。除此之外,这个AI工具可以轻松地将state属性的类型更改为enum,并在我们需要为subject属性创建新对象时创建一个全新的类。总之,它做得很好,创建了功能齐全的classes, controller, repository。

在我看来,ChatGPT应该能成为很优秀一种编程辅助工具,特别是针对于简单和重复的任务,因为它可以自动化这些任务,并推荐更高效和有效的编程技术。

因此,它可以使程序员节省时间,他们可以利用这些时间来解决更具挑战性和创造性的编程任务。

然而,我也认为重要的是使用它作为程序员编程技能的补充,而不是替代,因为它通常无法在复杂情况下提供最佳解决方案。

我相信这篇文章足以向最大的怀疑论者证明ChatGPT的能力。如果您是开发人员,您可以将ChatGPT用于其他各种用例,例如验证或测试代码。您甚至可以使用它在Python中生成代码。许多公司已经在寻找将ChatGPT集成到他们平台的方法。

总之,ChatGPT是一个令人印象深刻的人工智能语言模型,它有可能彻底改变我们编程的方式,虽然它目前可能无法完全取代人类程序员,但未来前景无限。


文章标签:

本文链接:『转载请注明出处』