.Net 코어에서 Api를 만드는 방법

22973 단어 csharpaspnetcoredotnet

달성 목표



이러한 작업을 수행하기 위해 일련의 메서드를 노출해야 하는 가상의 회사가 있습니다.
  • 제품 만들기
  • 제품 읽기
  • 제품 업데이트
  • 제품 삭제

  • 이러한 Api 메서드를 사용할 외부 애플리케이션에는 다음과 같은 화면이 있습니다.



    이 경우에는 4개의 필드가 있는 Product라는 엔터티가 있습니다.
  • 제품(int)
  • 이름(문자열)
  • ImageUrl(문자열)
  • 가격(소수점)

  • 코딩을 시작하기 전에 Api 및 Json 형식에 대한 기본 개념을 새로 고치는 것이 좋습니다.

    API는 무엇입니까?



    저는 이 개념에 대한 많은 정의를 읽었으며 다음과 같이 마음에 새기고 싶습니다.

    Apis is the specification of how one piece of software can interact with another.



    이 예제에서는 외부 응용 프로그램과 상호 작용하는 특정 작업을 수행하는 일련의 조각("메서드")을 만들 것입니다.

    | 운영 | HTTP 동사 |
    | 제품 만들기 | 포스트 |
    | 제품 읽기 | 가져오기 |
    | 제품 업데이트 | 업데이트 |
    | 제품 삭제 | 삭제 |

    JSON이란 무엇입니까?


  • JSON은 JavaScript Object Notation을 나타냅니다
  • .
  • JSON은 데이터 저장 및 전송을 위한 경량 형식입니다
  • .
  • 서버에서 웹 페이지로 데이터를 보낼 때 JSON이 자주 사용됨
  • JSON은 "자기 설명적"이며 이해하기 쉽습니다

  • 이제 코딩을 시작하겠습니다.

    1단계: dotnet 명령 실행



    명령줄 창을 열고 리포지토리 폴더로 이동한 후 다음 dotnet 명령을 입력하여 새 Api 프로젝트를 만듭니다.

    dotnet new webapi -n crudstore
    


    2단계: 프로젝트 탐색



    다음을 입력하여 프로젝트 crudstore 내부로 이동합니다.

    cd crudstore
    


    다음을 입력하여 vscode에서 프로젝트를 엽니다.

    code .
    


    3단계: 환경 설정



    확장 패널을 클릭하고 환경을 준비하고 생산성을 높이는 데 도움이 되는 다양한 도구를 탐색하십시오.

    개인적으로 다음을 설치하는 것이 좋습니다.
  • C#
  • C# 확장



  • 4단계: 모델 생성




    namespace Models
    {
    public class Product
    
    {
    public int Idproduct { get; set; }
    public string Name { get; set; }
    public string Imageurl { get; set; }
    public decimal Price { get; set; }
    }
    }
    


    5단계: 컨트롤러 만들기



    이 예를 설명하기 위해 제품의 정적 컬렉션을 사용하지만 실제 시나리오에서는 분명히 데이터베이스에 연결하기 위해 더 많은 코드를 추가해야 합니다.

    static List _products = new List(){
                new Product(){ Idproduct =0, Name= "hard disk", Price= 100 },
                new Product(){ Idproduct =1, Name= "monitor", Price= 250 },
            };
    


    그런 다음 모든 요청을 처리하는 다음 코드를 추가합니다.

    헤더에서 일부 네임스페이스를 사용해야 한다는 점에 유의하십시오.

    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc;
    using Models;
    



    [Produces("application/json")]
        [ApiController]
        [Route("api/products")]
        public class productController : Controller
        {
            static List _products = new List(){
                new Product(){ Idproduct =0, Name= "hard disk", Price= 100 },
                new Product(){ Idproduct =1, Name= "monitor", Price= 250 },
            };
    
            [HttpGet("GetAll")]
            public IActionResult GetAll()
            {
                return Ok(_products);
            }
    
            [HttpPost]
            public IActionResult Post([FromBody] Product product)
            {
                _products.Add(product);
                return StatusCode(StatusCodes.Status201Created);
            }
    
            [HttpPut]
            public IActionResult Put([FromBody] Product product)
            {
                var entity = _products.Where(x => x.Idproduct == product.Idproduct).FirstOrDefault();
                entity.Name = product.Name;
                entity.Price = product.Price;
                entity.Imageurl = product.Imageurl;
                return StatusCode(StatusCodes.Status200OK);
            }
    
            [HttpDelete]
            public IActionResult Delete([FromBody] Product product)
            {
                var entity = _products.Where(x => x.Idproduct == product.Idproduct).FirstOrDefault();
                _products.Remove(entity);
                return StatusCode(StatusCodes.Status200OK);
            }
        }
    


    6단계: 프로젝트에 Swagger 추가



    Swagger는 Api의 모든 메서드를 문서화하고 설명하는 데 매우 유용한 너겟입니다.
    명령줄과 프로젝트 내부에서 다음 명령을 입력합니다.

    dotnet add package Swashbuckle.AspNetCore
    


    결과적으로 다음과 같은 메시지가 표시됩니다.



    프로젝트의 startup.cs 클래스로 이동하여 해당 swagger를 적절하게 구성할 수 있도록 일부 변경합니다.

    Configureservices 메서드에서 다음 코드를 추가합니다.

    services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
                {
                    builder.AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader();
                }));
                // Register the Swagger generator, defining 1 or more Swagger documents
                services.AddSwaggerGen();
    


    그런 다음 Startup 클래스의 Configure 메서드로 이동하여 다음 코드를 추가합니다.

    // Enable middleware to serve generated Swagger as a JSON endpoint.
                app.UseSwagger();
    
                // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
                // specifying the Swagger JSON endpoint.
                app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
                });
    


    마지막으로 Startup 클래스는 다음과 같아야 합니다.

    public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            public IConfiguration Configuration { get; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddControllers();
                services.AddCors(o => o.AddPolicy("MyPolicy", builder =>
                {
                    builder.AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader();
                }));
                // Register the Swagger generator, defining 1 or more Swagger documents
                services.AddSwaggerGen();
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                // Enable middleware to serve generated Swagger as a JSON endpoint.
                app.UseSwagger();
    
                // Enable middleware to serve swagger-ui (HTML, JS, CSS, etc.),
                // specifying the Swagger JSON endpoint.
                app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
                });
    
                app.UseHttpsRedirection();
    
                app.UseRouting();
    
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllers();
                });
            }
        }
    


    7단계: API 테스트



    명령줄 창에 다음 명령을 입력합니다.

    dotnet run
    


    8단계: 결과 확인



    브라우저를 열고 URLhttps://localhost:5001/swagger/index.html을 입력하면 이전에 생성한 메서드 집합이 표시됩니다.



    메서드 GetAll



    URL: https://localhost:5001/api/products/GetAll

    [
    {
    "idproduct": 0,
    "name": "hard disk",
    "imageurl": null,
    "price": 100
    },
    {
    "idproduct": 1,
    "name": "monitor",
    "imageurl": null,
    "price": 250
    }
    ]
    


    방법 포스트



    URL: https://localhost:5001/api/products

    {
      "idproduct": 0,
      "name": "watch",
      "imageurl": "http://url",
      "price": 150
    }
    


    API를 테스트하기 위해 Swagger가 제공하는 모든 기능을 탐색할 수 있으므로 PostmanFiddler과 같은 다른 흥미로운 대안을 통해 API를 테스트할 수 있습니다.

    이 코드를 즐기시기 바랍니다!

    Download this code for Github

    그게 다야! 의심스러운 점이 있으면 주저하지 말고 의견을 남기거나 를 통해 저에게 질문하십시오.

    좋은 웹페이지 즐겨찾기