Junior
Mi az a RESTful és hogyan használják webszolgáltatások fejlesztésében?
sobes.tech MI
Válasz az MI-től
RESTful egy architektúrális stílus a elosztott rendszerek fejlesztéséhez, mint például a webszolgáltatások. A REST (Representational State Transfer) elvein alapul.
A REST fő elvei:
- Kliens-szerver: Világos elválasztás a kliens és a szerver között.
- Stateless (Állapot nélküli): A szerver nem tárol információt az ügyfél állapotáról a kérések között. Minden kérés tartalmazza a szükséges adatokat.
- Cacheable (Gyorsítótárazható): A kliensek vagy közbenső csomópontok cache-elhetik a válaszokat.
- Layered System (Réteges rendszer): A rendszer rétegekre osztható, és minden réteg csak a közvetlen szomszédjára lát rá.
- Code-On-Demand (Kód kérésre - opcionális): A szerver ideiglenesen bővítheti vagy konfigurálhatja a kliens funkcionalitását kód átadásával.
- Uniform Interface (Egységes felület): Ez magában foglalja:
- Resources Identification (Erőforrások azonosítása): Az erőforrásokat URI-k segítségével azonosítjuk.
- Manipulation of Resources through Representations (Erőforrások manipulálása reprezentációkon keresztül): A kliens az erőforrással a reprezentációja (pl. JSON, XML) segítségével lép kapcsolatba.
- Self-descriptive Messages (Önmagát leíró üzenetek): Minden üzenet tartalmazza a feldolgozáshoz szükséges információkat.
- Hypermedia as the Engine of Application State (HATEOAS - Hipermédia mint az alkalmazás állapotának motorja): A szerver válaszai tartalmaznak linkeket más erőforrásokra, lehetővé téve a kliens számára a dinamikus felfedezést és navigációt.
A C# nyelvben a RESTful architektúra gyakran az ASP.NET Core Web API technológiával valósul meg.
Egy tipikus RESTful használat példája C#-ban:
// Kontroller az "Product" erőforrás kezeléséhez
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
private readonly IProductRepository _productRepository;
public ProductsController(IProductRepository productRepository)
{
_productRepository = productRepository;
}
// Minden termék lekérése (GET /api/products)
[HttpGet]
public async Task<ActionResult<IEnumerable<Product>>> GetProducts()
{
var products = await _productRepository.GetAllAsync();
return Ok(products);
}
// Termék lekérése ID szerint (GET /api/products/{id})
[HttpGet("{id}")]
public async Task<ActionResult<Product>> GetProduct(int id)
{
var product = await _productRepository.GetByIdAsync(id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
// Új termék létrehozása (POST /api/products)
[HttpPost]
public async Task<ActionResult<Product>> CreateProduct(Product product)
{
await _productRepository.AddAsync(product);
return CreatedAtAction(nameof(GetProduct), new { id = product.Id }, product);
}
// Létező termék frissítése (PUT /api/products/{id})
[HttpPut("{id}")]
public async Task<IActionResult> UpdateProduct(int id, Product product)
{
if (id != product.Id)
{
return BadRequest();
}
var existingProduct = await _productRepository.GetByIdAsync(id);
if (existingProduct == null)
{
return NotFound();
}
await _productRepository.UpdateAsync(product);
return NoContent();
}
// Termék törlése (DELETE /api/products/{id})
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteProduct(int id)
{
var product = await _productRepository.GetByIdAsync(id);
if (product == null)
{
return NotFound();
}
await _productRepository.DeleteAsync(id);
return NoContent();
}
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
public interface IProductRepository
{
Task<IEnumerable<Product>> GetAllAsync();
Task<Product> GetByIdAsync(int id);
Task AddAsync(Product product);
Task UpdateAsync(Product product);
Task DeleteAsync(int id);
}
A HTTP módszerek (GET, POST, PUT, DELETE) használata az erőforrások (URI-k által reprezentáltak) műveleteiben a RESTful API tervezés kulcsfontosságú része. A HTTP státuszkódok (200 OK, 201 Created, 204 No Content, 400 Bad Request, 404 Not Found) az eredményeket jelzik.