1655347260
REST API は、サーバーと通信するために複数のクライアント(またはAPPS)が使用できるアプリケーションプログラミングインターフェイスです。
Rest APIは、アプリケーションに必要なデータを便利な形式(JSONやXMLなど)で保存および取得する一種のWebサービスです。
ステートレスであるため、Webサービスにアクセスするために依存するコードライブラリを必要としないため、開発者に大きな柔軟性を提供します。
RESTでサポートされている多くのプロトコルの中で、最も一般的なものはHTTPです。
HTTPRequestを使用してクライアントから要求が送信されると、対応する応答がHTTPResponseを使用してサーバーから送信されます。リクエストとレスポンスでサポートされている最も広く使用されている機械可読形式は、JSON(Javascript Object Notification)とXML(Extensible Markup Language)です。
RESTは、コンピューター科学者のROYFIELDINGによって作成されました。
REST APIを使用して、さまざまなアクションを実行できます。アクションに基づいて、関連する方法を使用する必要があります。以下は、RESTでサポートされている5つの方法です。
これを例で見てみましょう。私たちは、母親が十分な休息をとることが決してないことを知っています。しかし、これらの休むことのないママを例として取り上げ、RestAPIをどのように使用するかを見てみましょう。:)
生まれたばかりの赤ちゃんによる過度の要求の中で、おむつはリーダーボードで最初に位置します。
母親は赤ちゃんのためにすべてが最善であることを望んでいます。ですから、母親が赤ちゃんに最適なおむつを選びたいと思うのは明らかです。そこで、彼女はショッピングWebサイト(フリップカートを想定)にアクセスして、おむつを検索します。これにより、すべてのおむつのリストを取得するために、フリップカートのサーバーにHTTPリクエストが送信されます。FlipkartのサーバーはHTTP応答で応答します。これは、いくつかの基本的な詳細を含むおむつのリストを含むJSONオブジェクト(想定)になります。FlipkartのWebサイトは、この応答を読み取り、人間が読める形式に変換して、母親が見ることができるようにWebページに表示します。
彼女が生まれたばかりの赤ちゃんのために特定のおむつを選び、それを彼女のリストに追加した後。これにより、POSTリクエストが作成され、おむつのブランド、サイズ、数量、価格などを含む新しいレコードがフリップカートのデータベースに作成されます。
彼女の赤ちゃんは成長を続け、すぐに新生児のサイズを超えます。母親がまだおむつのブランドを気に入っていて、サイズを大きくしたいとします。彼女がしなければならないのは、新しいおむつのサイズを選択することだけです。彼女がおむつのサイズを新生児のサイズからサイズ1に更新すると、これによりPATCHメソッドがトリガーされ、他のすべては同じままで、おむつのサイズのみが変更されます。
母親が現在のブランドを変更し、別のブランドに切り替えることを決定することは非常に一般的です。ここで、母親はPUTリクエストを開始します。ここで、以前に選択されたブランドを含むデータ全体が変更され、新しく選択されたブランドに対応するデータに置き換えられます。
最後に、いくつかのGET、POST、PUT、およびPATCHを含む一連の実験の後、母親が子供をトイレトレーニングする時が来ました。彼女が子供を訓練することに成功した場合、おむつはもはや必要ありません。これにより、 DELETE要求がトリガーされます。
前提条件
ステップ1
Visual Studio 2022を開き、asp.netコアwebapiプロジェクトを作成します。
ステップ2
NugetからNpgsql.EntityFrameworkCore.PostgreSQLとMicrosoft.EntityFrameworkCore.Toolsをインストールします
ステップ3
Product.csとOrder.csを作成します
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("product")]
public class Product {
[Key, Required]
public int id {
get;
set;
}
[Required]
public string ? name {
get;
set;
}
public string ? brand {
get;
set;
}
public string ? size {
get;
set;
}
public decimal price {
get;
set;
}
public virtual ICollection < Order > orders {
get;
set;
}
}
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("order")]
public class Order {
[Key, Required]
public int id {
get;
set;
}
public int product_id {
get;
set;
}
[Required]
public string ? name {
get;
set;
}
public string ? address {
get;
set;
}
public string ? phone {
get;
set;
}
public DateTime createdon {
get;
set;
}
public virtual Product product {
get;
set;
}
}
ステップ4
DbContextクラスから継承されたEF_DataContextを作成します
using Microsoft.EntityFrameworkCore;
public class EF_DataContext: DbContext {
public EF_DataContext(DbContextOptions < EF_DataContext > options): base(options) {}
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.UseSerialColumns();
}
public DbSet <Product> Products {
get;
set;
}
public DbSet <Order> Orders {
get;
set;
}
}
ステップ5
appsetting.jsonを開きます
"ConnectionStrings": {
"Ef_Postgres_Db": "Server=localhost;Database=shopingpostgres;Port=5432;User Id=postgres;Password=qwerty1234;"
}
ステップ6
Program.csを開く
builder.Services.AddDbContext < EF_DataContext > (o => o.UseNpgsql(builder.Configuration.GetConnectionString("Ef_Postgres_Db")));
ステップ7
2つのコマンドを実行します
Add-Migration InitialDatabase
Update-Database
ステップ8
API通信に使用されるAPI製品モデルと注文モデルを作成します
public class Product {
public int id {
get;
set;
}
public string ? name {
get;
set;
}
public string ? brand {
get;
set;
}
public string ? size {
get;
set;
}
public decimal price {
get;
set;
}
}
public class Order {
public int id {
get;
set;
}
public int product_id {
get;
set;
}
public string ? name {
get;
set;
}
public string ? address {
get;
set;
}
public string ? phone {
get;
set;
}
public DateTime createdon {
get;
set;
}
public virtual Product product {
get;
set;
}
}
ステップ9
データベースと通信するDBhelperクラスを追加します
using ShoppingWebApi.EfCore;
namespace ShoppingWebApi.Model {
public class DbHelper {
private EF_DataContext _context;
public DbHelper(EF_DataContext context) {
_context = context;
}
/// <summary>
/// GET
/// </summary>
/// <returns></returns>
public List < ProductModel > GetProducts() {
List < ProductModel > response = new List < ProductModel > ();
var dataList = _context.Products.ToList();
dataList.ForEach(row => response.Add(new ProductModel() {
brand = row.brand,
id = row.id,
name = row.name,
price = row.price,
size = row.size
}));
return response;
}
public ProductModel GetProductById(int id) {
ProductModel response = new ProductModel();
var row = _context.Products.Where(d => d.id.Equals(id)).FirstOrDefault();
return new ProductModel() {
brand = row.brand,
id = row.id,
name = row.name,
price = row.price,
size = row.size
};
}
/// <summary>
/// It serves the POST/PUT/PATCH
/// </summary>
public void SaveOrder(OrderModel orderModel) {
Order dbTable = new Order();
if (orderModel.id > 0) {
//PUT
dbTable = _context.Orders.Where(d => d.id.Equals(orderModel.id)).FirstOrDefault();
if (dbTable != null) {
dbTable.phone = orderModel.phone;
dbTable.address = orderModel.address;
}
} else {
//POST
dbTable.phone = orderModel.phone;
dbTable.address = orderModel.address;
dbTable.name = orderModel.name;
dbTable.Product = _context.Products.Where(f => f.id.Equals(orderModel.product_id)).FirstOrDefault();
_context.Orders.Add(dbTable);
}
_context.SaveChanges();
}
/// <summary>
/// DELETE
/// </summary>
/// <param name="id"></param>
public void DeleteOrder(int id) {
var order = _context.Orders.Where(d => d.id.Equals(id)).FirstOrDefault();
if (order != null) {
_context.Orders.Remove(order);
_context.SaveChanges();
}
}
}
}
ステップ10
Apiコントローラーを作成し、ShoppingRestApiという名前を付けます
using Microsoft.AspNetCore.Mvc;
using ShoppingWebApi.EfCore;
using ShoppingWebApi.Model;
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace ShoppingWebApi.Controllers {
[ApiController]
public class ShoppingApiController: ControllerBase {
private readonly DbHelper _db;
public ShoppingApiController(EF_DataContext eF_DataContext) {
_db = new DbHelper(eF_DataContext);
}
// GET: api/<ShoppingApiController>
[HttpGet]
[Route("api/[controller]/GetProducts")]
public IActionResult Get() {
ResponseType type = ResponseType.Success;
try {
IEnumerable < ProductModel > data = _db.GetProducts();
if (!data.Any()) {
type = ResponseType.NotFound;
}
return Ok(ResponseHandler.GetAppResponse(type, data));
} catch (Exception ex) {
return BadRequest(ResponseHandler.GetExceptionResponse(ex));
}
}
// GET api/<ShoppingApiController>/5
[HttpGet]
[Route("api/[controller]/GetProductById/{id}")]
public IActionResult Get(int id) {
ResponseType type = ResponseType.Success;
try {
ProductModel data = _db.GetProductById(id);
if (data == null) {
type = ResponseType.NotFound;
}
return Ok(ResponseHandler.GetAppResponse(type, data));
} catch (Exception ex) {
return BadRequest(ResponseHandler.GetExceptionResponse(ex));
}
}
// POST api/<ShoppingApiController>
[HttpPost]
[Route("api/[controller]/SaveOrder")]
public IActionResult Post([FromBody] OrderModel model) {
try {
ResponseType type = ResponseType.Success;
_db.SaveOrder(model);
return Ok(ResponseHandler.GetAppResponse(type, model));
} catch (Exception ex) {
return BadRequest(ResponseHandler.GetExceptionResponse(ex));
}
}
// PUT api/<ShoppingApiController>/5
[HttpPut]
[Route("api/[controller]/UpdateOrder")]
public IActionResult Put([FromBody] OrderModel model) {
try {
ResponseType type = ResponseType.Success;
_db.SaveOrder(model);
return Ok(ResponseHandler.GetAppResponse(type, model));
} catch (Exception ex) {
return BadRequest(ResponseHandler.GetExceptionResponse(ex));
}
}
// DELETE api/<ShoppingApiController>/5
[HttpDelete]
[Route("api/[controller]/DeleteOrder/{id}")]
public IActionResult Delete(int id) {
try {
ResponseType type = ResponseType.Success;
_db.DeleteOrder(id);
return Ok(ResponseHandler.GetAppResponse(type, "Delete Successfully"));
} catch (Exception ex) {
return BadRequest(ResponseHandler.GetExceptionResponse(ex));
}
}
}
}
ステップ11
API応答を処理する応答モデルと応答ハンドラーを追加します
namespace ShoppingWebApi.Model {
public class ApiResponse {
public string Code {
get;
set;
}
public string Message {
get;
set;
}
public object ? ResponseData {
get;
set;
}
}
public enum ResponseType {
Success,
NotFound,
Failure
}
}
次に、ビデオで示されているように、POSTMANを使用してAPIをテストします。
このストーリーは、もともとhttps://www.c-sharpcorner.com/article/restful-api-in-net-core-using-ef-core-and-postgres/で公開されました
#restful #api #aspdotnet #postgre #efcore
1655347260
REST API は、サーバーと通信するために複数のクライアント(またはAPPS)が使用できるアプリケーションプログラミングインターフェイスです。
Rest APIは、アプリケーションに必要なデータを便利な形式(JSONやXMLなど)で保存および取得する一種のWebサービスです。
ステートレスであるため、Webサービスにアクセスするために依存するコードライブラリを必要としないため、開発者に大きな柔軟性を提供します。
RESTでサポートされている多くのプロトコルの中で、最も一般的なものはHTTPです。
HTTPRequestを使用してクライアントから要求が送信されると、対応する応答がHTTPResponseを使用してサーバーから送信されます。リクエストとレスポンスでサポートされている最も広く使用されている機械可読形式は、JSON(Javascript Object Notification)とXML(Extensible Markup Language)です。
RESTは、コンピューター科学者のROYFIELDINGによって作成されました。
REST APIを使用して、さまざまなアクションを実行できます。アクションに基づいて、関連する方法を使用する必要があります。以下は、RESTでサポートされている5つの方法です。
これを例で見てみましょう。私たちは、母親が十分な休息をとることが決してないことを知っています。しかし、これらの休むことのないママを例として取り上げ、RestAPIをどのように使用するかを見てみましょう。:)
生まれたばかりの赤ちゃんによる過度の要求の中で、おむつはリーダーボードで最初に位置します。
母親は赤ちゃんのためにすべてが最善であることを望んでいます。ですから、母親が赤ちゃんに最適なおむつを選びたいと思うのは明らかです。そこで、彼女はショッピングWebサイト(フリップカートを想定)にアクセスして、おむつを検索します。これにより、すべてのおむつのリストを取得するために、フリップカートのサーバーにHTTPリクエストが送信されます。FlipkartのサーバーはHTTP応答で応答します。これは、いくつかの基本的な詳細を含むおむつのリストを含むJSONオブジェクト(想定)になります。FlipkartのWebサイトは、この応答を読み取り、人間が読める形式に変換して、母親が見ることができるようにWebページに表示します。
彼女が生まれたばかりの赤ちゃんのために特定のおむつを選び、それを彼女のリストに追加した後。これにより、POSTリクエストが作成され、おむつのブランド、サイズ、数量、価格などを含む新しいレコードがフリップカートのデータベースに作成されます。
彼女の赤ちゃんは成長を続け、すぐに新生児のサイズを超えます。母親がまだおむつのブランドを気に入っていて、サイズを大きくしたいとします。彼女がしなければならないのは、新しいおむつのサイズを選択することだけです。彼女がおむつのサイズを新生児のサイズからサイズ1に更新すると、これによりPATCHメソッドがトリガーされ、他のすべては同じままで、おむつのサイズのみが変更されます。
母親が現在のブランドを変更し、別のブランドに切り替えることを決定することは非常に一般的です。ここで、母親はPUTリクエストを開始します。ここで、以前に選択されたブランドを含むデータ全体が変更され、新しく選択されたブランドに対応するデータに置き換えられます。
最後に、いくつかのGET、POST、PUT、およびPATCHを含む一連の実験の後、母親が子供をトイレトレーニングする時が来ました。彼女が子供を訓練することに成功した場合、おむつはもはや必要ありません。これにより、 DELETE要求がトリガーされます。
前提条件
ステップ1
Visual Studio 2022を開き、asp.netコアwebapiプロジェクトを作成します。
ステップ2
NugetからNpgsql.EntityFrameworkCore.PostgreSQLとMicrosoft.EntityFrameworkCore.Toolsをインストールします
ステップ3
Product.csとOrder.csを作成します
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("product")]
public class Product {
[Key, Required]
public int id {
get;
set;
}
[Required]
public string ? name {
get;
set;
}
public string ? brand {
get;
set;
}
public string ? size {
get;
set;
}
public decimal price {
get;
set;
}
public virtual ICollection < Order > orders {
get;
set;
}
}
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("order")]
public class Order {
[Key, Required]
public int id {
get;
set;
}
public int product_id {
get;
set;
}
[Required]
public string ? name {
get;
set;
}
public string ? address {
get;
set;
}
public string ? phone {
get;
set;
}
public DateTime createdon {
get;
set;
}
public virtual Product product {
get;
set;
}
}
ステップ4
DbContextクラスから継承されたEF_DataContextを作成します
using Microsoft.EntityFrameworkCore;
public class EF_DataContext: DbContext {
public EF_DataContext(DbContextOptions < EF_DataContext > options): base(options) {}
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.UseSerialColumns();
}
public DbSet <Product> Products {
get;
set;
}
public DbSet <Order> Orders {
get;
set;
}
}
ステップ5
appsetting.jsonを開きます
"ConnectionStrings": {
"Ef_Postgres_Db": "Server=localhost;Database=shopingpostgres;Port=5432;User Id=postgres;Password=qwerty1234;"
}
ステップ6
Program.csを開く
builder.Services.AddDbContext < EF_DataContext > (o => o.UseNpgsql(builder.Configuration.GetConnectionString("Ef_Postgres_Db")));
ステップ7
2つのコマンドを実行します
Add-Migration InitialDatabase
Update-Database
ステップ8
API通信に使用されるAPI製品モデルと注文モデルを作成します
public class Product {
public int id {
get;
set;
}
public string ? name {
get;
set;
}
public string ? brand {
get;
set;
}
public string ? size {
get;
set;
}
public decimal price {
get;
set;
}
}
public class Order {
public int id {
get;
set;
}
public int product_id {
get;
set;
}
public string ? name {
get;
set;
}
public string ? address {
get;
set;
}
public string ? phone {
get;
set;
}
public DateTime createdon {
get;
set;
}
public virtual Product product {
get;
set;
}
}
ステップ9
データベースと通信するDBhelperクラスを追加します
using ShoppingWebApi.EfCore;
namespace ShoppingWebApi.Model {
public class DbHelper {
private EF_DataContext _context;
public DbHelper(EF_DataContext context) {
_context = context;
}
/// <summary>
/// GET
/// </summary>
/// <returns></returns>
public List < ProductModel > GetProducts() {
List < ProductModel > response = new List < ProductModel > ();
var dataList = _context.Products.ToList();
dataList.ForEach(row => response.Add(new ProductModel() {
brand = row.brand,
id = row.id,
name = row.name,
price = row.price,
size = row.size
}));
return response;
}
public ProductModel GetProductById(int id) {
ProductModel response = new ProductModel();
var row = _context.Products.Where(d => d.id.Equals(id)).FirstOrDefault();
return new ProductModel() {
brand = row.brand,
id = row.id,
name = row.name,
price = row.price,
size = row.size
};
}
/// <summary>
/// It serves the POST/PUT/PATCH
/// </summary>
public void SaveOrder(OrderModel orderModel) {
Order dbTable = new Order();
if (orderModel.id > 0) {
//PUT
dbTable = _context.Orders.Where(d => d.id.Equals(orderModel.id)).FirstOrDefault();
if (dbTable != null) {
dbTable.phone = orderModel.phone;
dbTable.address = orderModel.address;
}
} else {
//POST
dbTable.phone = orderModel.phone;
dbTable.address = orderModel.address;
dbTable.name = orderModel.name;
dbTable.Product = _context.Products.Where(f => f.id.Equals(orderModel.product_id)).FirstOrDefault();
_context.Orders.Add(dbTable);
}
_context.SaveChanges();
}
/// <summary>
/// DELETE
/// </summary>
/// <param name="id"></param>
public void DeleteOrder(int id) {
var order = _context.Orders.Where(d => d.id.Equals(id)).FirstOrDefault();
if (order != null) {
_context.Orders.Remove(order);
_context.SaveChanges();
}
}
}
}
ステップ10
Apiコントローラーを作成し、ShoppingRestApiという名前を付けます
using Microsoft.AspNetCore.Mvc;
using ShoppingWebApi.EfCore;
using ShoppingWebApi.Model;
// For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
namespace ShoppingWebApi.Controllers {
[ApiController]
public class ShoppingApiController: ControllerBase {
private readonly DbHelper _db;
public ShoppingApiController(EF_DataContext eF_DataContext) {
_db = new DbHelper(eF_DataContext);
}
// GET: api/<ShoppingApiController>
[HttpGet]
[Route("api/[controller]/GetProducts")]
public IActionResult Get() {
ResponseType type = ResponseType.Success;
try {
IEnumerable < ProductModel > data = _db.GetProducts();
if (!data.Any()) {
type = ResponseType.NotFound;
}
return Ok(ResponseHandler.GetAppResponse(type, data));
} catch (Exception ex) {
return BadRequest(ResponseHandler.GetExceptionResponse(ex));
}
}
// GET api/<ShoppingApiController>/5
[HttpGet]
[Route("api/[controller]/GetProductById/{id}")]
public IActionResult Get(int id) {
ResponseType type = ResponseType.Success;
try {
ProductModel data = _db.GetProductById(id);
if (data == null) {
type = ResponseType.NotFound;
}
return Ok(ResponseHandler.GetAppResponse(type, data));
} catch (Exception ex) {
return BadRequest(ResponseHandler.GetExceptionResponse(ex));
}
}
// POST api/<ShoppingApiController>
[HttpPost]
[Route("api/[controller]/SaveOrder")]
public IActionResult Post([FromBody] OrderModel model) {
try {
ResponseType type = ResponseType.Success;
_db.SaveOrder(model);
return Ok(ResponseHandler.GetAppResponse(type, model));
} catch (Exception ex) {
return BadRequest(ResponseHandler.GetExceptionResponse(ex));
}
}
// PUT api/<ShoppingApiController>/5
[HttpPut]
[Route("api/[controller]/UpdateOrder")]
public IActionResult Put([FromBody] OrderModel model) {
try {
ResponseType type = ResponseType.Success;
_db.SaveOrder(model);
return Ok(ResponseHandler.GetAppResponse(type, model));
} catch (Exception ex) {
return BadRequest(ResponseHandler.GetExceptionResponse(ex));
}
}
// DELETE api/<ShoppingApiController>/5
[HttpDelete]
[Route("api/[controller]/DeleteOrder/{id}")]
public IActionResult Delete(int id) {
try {
ResponseType type = ResponseType.Success;
_db.DeleteOrder(id);
return Ok(ResponseHandler.GetAppResponse(type, "Delete Successfully"));
} catch (Exception ex) {
return BadRequest(ResponseHandler.GetExceptionResponse(ex));
}
}
}
}
ステップ11
API応答を処理する応答モデルと応答ハンドラーを追加します
namespace ShoppingWebApi.Model {
public class ApiResponse {
public string Code {
get;
set;
}
public string Message {
get;
set;
}
public object ? ResponseData {
get;
set;
}
}
public enum ResponseType {
Success,
NotFound,
Failure
}
}
次に、ビデオで示されているように、POSTMANを使用してAPIをテストします。
このストーリーは、もともとhttps://www.c-sharpcorner.com/article/restful-api-in-net-core-using-ef-core-and-postgres/で公開されました