龙空技术网

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

程序你好 101

前言:

目前各位老铁们对“aspnet core 高级编程”大约比较着重,咱们都想要知道一些“aspnet core 高级编程”的相关内容。那么小编同时在网上收集了一些有关“aspnet core 高级编程””的相关内容,希望兄弟们能喜欢,我们一起来了解一下吧!

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

标签: #aspnet core 高级编程