간단한 API를 만들어 봅시다!

27050 단어 webdevdotnetbeginners
컴파일 언어를 사용하여 간단한 REST API를 만듭니다.이 예에서, 우리는 asp를 사용할 것이다.net 커널에서 API 서버를 생성합니다.게시물, 가져오기, 배치, 삭제 작업을 보도할 것입니다.
API 생성에는 여러 가지 옵션이 있습니다.Python, JavaScript, Java 및 기타 여러 언어.이 예에서, 우리는 asp를 사용할 것이다.net kool-aid.이 생태계는 대량의 프로젝트를 만들어 냈는데, 중서부에서는 많은 회사들의 주요 선택이다.

이 문서에서는 Store API 스타일의 기능을 구축하는 방법에 대해 설명합니다.
집에 있는 사람들을 따르는 모든 것들code is in a GitHub repository.환매 협의 중의 모든 제출은 본문의 한 단계에 대응한다.

단계 1 - 항목 생성


이 가설은 네가 가지고 있다.NET 코어 SDK 또는 Visual Studio 커뮤니티가 설치되어 있습니다.Visual Studio 커뮤니티가 있는 경우 다음을 수행합니다.
파일 > 새로 만들기 > 프로젝트 들어가기...
Visual C# 항목 범주를 선택하고 ASP 를 선택합니다.NET 웹 응용 프로그램(.NET Framework)
항목의 이름을 AspNetWebapiRest로 지정하고 [확인]을 클릭합니다.
빈 프로젝트 템플릿을 선택하고 "확인"을 누르십시오. (핵심 인용을 추가하기 위해 상자를 선택하지 마십시오.)
dotnet new webapi -o StoreApi
cd StoreApi
dotnet add package Microsoft.EntityFrameworkCore.InMemory
code -r ../StoreApi
이렇게 하면 간단한 ASP가 생성됩니다.NET API 웹 사이트.우리는 메모리 데이터베이스를 이용하여 빠른 개발을 진행하고 있다.이것은 정확한 현장 설정이 아니라 복잡하지 않을 것이다. 하나를 추가한 후에.

2단계 - 도메인 모델 구축


이 단계에서 우리는 몇 가지 간단한 유형을 세웠다.
/모델/제품대테러 엘리트
public class Products
{
   public int Id { get; set; }
   public string Sku { get; set; }
   public string Name { get; set; }
   public string Description { get; set; }
   public decimal Price { get; set; }
   public bool IsAvailable { get; set; }

   public int CategoryId { get; set; }

   /// <summary>
   /// This is to stop a circular reference
   /// </summary>
   [JsonIgnore]
   public virtual Category Category { get; set; }
}
/모델/사용자입니다.대테러 엘리트
public class User
{
    public int Id { get; set; }
    public string Email { get; set; }
    public virtual List<Order> Orders { get; set; }
}
/모델/범주대테러 엘리트
public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual List<Product> Products { get; set; }
}
/모델/주문대테러 엘리트
public class Order
{
    public int Id { get; set; }
    public DateTime OrderDate { get; set; }
    public int UserId { get; set; }

    /// <summary>
    /// This is to stop a circular reference
    /// </summary>
    [JsonIgnore]
    public virtual User User { get; set; }
    public virtual List<Product> Products { get; set; }
}

3단계 - 솔리드 프레임 코어 구축


우리는 두 개의nuget 패키지를 설치해서 시작할 것이다.
Install-Package Microsoft.EntityFrameworkCore.InMemory -Version 3.1.7

And

Install-Package Microsoft.EntityFrameworkCore -Version 3.1.7
이 섹션에서는 먼저 ShopContext 클래스를 만듭니다.여기서 실체 프레임워크의 핵심을 프로젝트에 추가하고 데이터베이스에 피드를 추가합니다.
모델/상점 배경.대테러 엘리트
public class ShopContext : DbContext
{
    public ShopContext(DbContextOptions<ShopContext> options) : base(options)
    { }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Category>().HasMany(c => c.Products).WithOne(a => a.Category).HasForeignKey(a => a.CategoryId);
        modelBuilder.Entity<Order>().HasMany(o => o.Products);
        modelBuilder.Entity<Order>().HasOne(o => o.User);
        modelBuilder.Entity<User>().HasMany(u => u.Orders).WithOne(o => o.User).HasForeignKey(o => o.UserId);

        // modelBuilder.Seed();
    }

        public DbSet<Product> Products { get; set; }
        public DbSet<Category> Categories { get; set; }
        public DbSet<Order> Orders { get; set; }
        public DbSet<User> Users { get; set; }
}
우리 이 수업에서 무슨 일이 발생했는지 탐구해 봅시다.문서DbContext를 사용하여 구성합니다.이후에 우리는 실체 프레임워크와 이런 모델 클래스 간의 관계를 알려야 한다.우리는 실체 프레임워크의 핵심에서 Fluent API를 사용하여 비추기mappings를 한다.너는 이곳에서 그것들을 어떻게 사용하는지 더욱 깊이 이해할 수 있지만, 이 개념에 대한 세부 사항은 본문의 범위를 넘어섰다.
데이터베이스에 값 피드를 추가하기 위한 확장 방법도 추가할 것입니다
/Models/ModelBuilderExtensions.cs
이 파일은 너무 길어서 미리 보기를 제공할 수 없습니다. 위의 링크를 사용해서 복사하십시오.
이것들이 있으면 우리는 지금 약간의 때 쌓인 작업을 시작할 수 있다.자, 시작합시다.

4단계 - GET 구성


여기서 GetAllProducts와 GetProduct(int-id) 방법을 만듭니다.말 그대로'모든 제품 가져오기'는 모든 제품을 포함한다.get 제품은 제품 id를 사용하여 특정 제품을 철회합니다.
public class ProductsController : ControllerBase
{
    private readonly ShopContext _context;

    public ProductsController(ShopContext context)
    {
        _context = context;

        _context.Database.EnsureCreated();
    }

    [HttpGet]
    public IActionResult GetAllProducts()
    {
        return Ok(_context.Products.ToArray());
    }

    [HttpGet("{id}")]
    public IActionResult GetProduct(int id)
    {
        var product = _context.Products.Find(id);
        return Ok(product);
    }
}
우리는 이미 상하문 클래스를 만들었다.상하문 대상은 우리가 실행할 때 데이터베이스와 상호작용하는 방식이다.컨텍스트 객체를 사용하는 Find 및 ToArray 호출이 메소드의 핵심입니다.
이거 얘 전화 받아!!!

5단계 - 게시물 작성


여기서, 우리는 이 점을 실현하기 위해 약간의 추가 소프트웨어가 필요하다.나는 썼지만 다른 것은 모두 문제없다.우리는 다음 json을 사용하여 우리의 새 코드를 테스트할 것이다.
{
    "name": "Old Skater Jeans",
    "sku": "AWMGSYYJ",
    "price": 68.00,
    "isAavailable": true,
    "categoryId": 1
}
선택한 api 클라이언트를 사용하면 json을put 호출 주체에 놓을 것입니다.우리는 아래의 방법을 '현재 하락 보기 옵션' 에 추가할 것이다.
[HttpPost]
public ActionResult<Product> PostProduct([FromBody] Product product)
{
    _context.Products.Add(product);
    _context.SaveChanges();
        return CreatedAtAction (
            "GetProduct",
            new { id = product.Id },
            product
        );
}
우리 컨트롤러에서 우리는 호출을 받아들일 수 있고, 그것을 테스트할 수 있으며, 시스템에서 업데이트를 볼 수 있다.
이 방법에서 우리는 EF coreCreatedAtAction를 사용하여 호출한다.EF는 현재dd입니다.createDataAction은 생성된 (201) 응답과location 헤더를 되돌려줍니다.다른 한 편의 문장에서 우리는 이것에 대해 보충을 할 것이지만, 지금은 이것이 간단한 예이다.

6단계 - PUT 구축


이 절에서api의 업데이트 부분을 토론할 것입니다.우리는 유사한 json을 사용할 것입니다. 그러나 약간의 변경 사항이 있습니다.
{
    "name": "Super Old Skater Jeans",
    "sku": "AWMGSYYZZ",
    "price": 168.00,
    "isAavailable": true,
    "categoryId": 1
}
이름,sku, 가격만 업데이트되었습니다.puthttps://localhost:{your 포트 번호}/products/{업데이트할 제품의 id}를 터치하려면 정확한 경로를 사용해야 합니다.현재 우리는 같은 페이지에 있습니다. 당신의 실제 URL에는 큰 괄호가 있어서는 안 됩니다.이것은 우리에게 주는 것이다.
우리는 지금 새로운put 방법을 추가할 것이다.
[HttpPut("{id}")]
public IActionResult PutProduct([FromRoute] int id, [FromBody] Product product)
{
    if (id != product.Id)
        {
            return BadRequest();
        }
    _context.Entry(product).State = EntityState.Modified;

    try
        {
            _context.SaveChanges();
        }

    catch (DbUpdateConcurrencyException)
        {
            if (_context.Products.Find(id) == null)
            {
                return NotFound();
            }
                throw;
        }
            return NoContent();
}
여기서 우리는 새로운 것이나 신기한 것이 없는 많은 같은 대상을 처리하고 있다.우리는 BadRequest,NotFoundNoContent를 사용한다.사용EntityState우리는 많은 선택을 했지만 이 작은 부분에서 토론할 내용이 너무 많다.문서에서 볼 수 있듯이 이것은'수정된 것: 실체가 상하문에 의해 추적되고 데이터베이스에 존재하며 일부 또는 모든 속성 값이 수정되었다'는 것이다.이것은 우리가 계속 전진할 수 있도록 충분할 것이다.

단계 7 - 빌드 삭제


네, 우리는 이미 결승점에 도착했습니다.delete의 작용 방식은put 방법과 같다.Google 도구를 제외하고put 대신 delete를 선택해서 동작을 볼 것입니다.
[HttpDelete("{id}")]
public async Task<ActionResult<Product>> DeleteProduct(int id)
{
    var product = await _context.Products.FindAsync(id);
    if (product == null)
    {
        return NotFound();
    }

    _context.Products.Remove(product);
    await _context.SaveChangesAsync();
    return product;
}
이것이 바로 우리의 기본api!!다음 게시물에 이 항목에 더 많은 변경 사항을 추가할 것입니다.우리가 소개할 일부 내용은 그 중에서 완전한 데이터베이스, 페이지 나누기, 필터, 검색과 정렬 등을 추가하는 것이다.읽어주셔서 감사합니다!!!!
우리 끝났어.모든 변경 사항을 순서대로 looking at the commits 볼 수 있습니다.
또는 https://github.com/cmmsolutions/SimpleStoreAPI에서 최종 결과를 확인합니다.

좋은 웹페이지 즐겨찾기