Skip to content

furkankahvecii/symfony4-restful

Repository files navigation

Symfony4 RESTFUL API Dökümantasyonu

ABC Company tedarikçi bir firmadır ve 3 müşterisi vardır. Bu müşterilerin kendilerine ait kullanıcı adları ve şifreleri vardır. Müşteriler Restful servislerini kullanarak sipariş oluşturabilir ve görebilirler. Bu beklentiler doğrultusunda aşağıda listelenen servisleri hazırlamanı bekliyoruz.

İstenen servisler:

  • Sisteme login olma ve JWT Token alma
  • Yeni sipariş oluşturma (orderCode, productid, quantity, address, shippingDate)
  • Siparişi güncelleme (shippingDate henüz gelmediyse)
  • Sipariş detayını görme
  • Tüm siparişlerini listeleme

Önemli Notlar

  • API geliştirdiğimiz için php symfony/skeleton my_project_name --version= 4.0 ile yapı kuruldu. Temel olarak bir 'FOSRestBundle' paketi kullanılarak RESTFUL API geliştirildi. Resourcelarımız mysql veritabanında tutuldu. JWT için "lexik/jwt-authentication-bundle" kullanıldı.
  • Programı indirdikten sonra, .env dosyasındaki DATABASE_URL keyine karşılık gelen değeri sizde bulunan mysql'e göre ayarlamanız gerekmektedir. Örnek olarak mysql://root:@127.0.0.1:3306/restful. (mysql://username:password@hostname:mysqlport/dbname)
  • composer install komutu ile dependiecesleri yüklemeniz gerekmektedir.
  • symfony server:start ile web serverı çalıştırabiliriz. (http://127.0.0.1:8000/)
  • Kullanılan DB Diagram
  • Postman Collection

Authentication

  • /register ve /login_check pathleri haric diger pathler header kısmında JWT gönderilerek yapılmalıdır. Yollanmazsa eğer "JWT Token not found" hatası alınır.
  • JWT TTL(Time To Live) 3600 saniyedir, alındıktan 3600 saniye sonra JWT yollanırsa "Expired JWT" response alınır. (Code = 401)
  • Geçersiz JWT yollanırsa "Invalid JWT Token" response alınır.
  • Gönderilen JWT geçerli ise, kullanıma açık olan servislere erişilebilir. Her servisteki işlemler JWT'deki usera göre yapılır.

Sisteme Kayıt Olma (Register)

Gönderilen: Kayıt kimlik bilgileri Elde edilen: Sistemde oturum açma fırsatı

Request:

POST /register HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: xy

{
    "_username": "test_user",
    "_password": "test_password" 
}

Successful Response:

HTTP/1.1 201 Created
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

{
   "message" : "User test_user successfully created"
}

Failed Response:

HTTP/1.1 500 Server Error
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

{
    "code": 500,
    "message": "Integrity constraint violation: 1062 Duplicate entry 'test_user' for key 'UNIQ_1483A5E9F85E0677'"
}

JWT Token Alma

Gönderilen: Giriş kimlik bilgileri Elde edilen: JWT-Token

Request:

POST /login_check HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: xy

{
    "username": "test_user",
    "password": "test_password" 
}

Successful Response:

HTTP/1.1 200 OK
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

{
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE2MDI5MjM2ODksImV4cCI6MTYwMjkyNzI4OSwicm9sZXMiOlsiUk9MRV9VU0VSIl0sInVzZXJuYW1lIjoidGVzdF91c2VybmFtZTIifQ.Ax_5TjrU_aID5lonG8ENaxpL-9-NYdgOu_5Ly9CC-3Bi4LU7vzuqq_OdQ8FvMtdTw3qoLMJp2RJ9L86B4qHTicZMdOiOJ8aMY_tlQQRY1p2Bx3weSK1p4VHdRLl20aEOZLFyBJCfPia4EqZidzzlmD8mrr_-atSQ1eD2VWQmqbT5ux2p5Rqg768aut1w3Se2xIuU_ijmtgXtngN_OyPpUxTYXWLXc4690i0BQYhPgHFk8EIm2qa3ZboumPnle6uywIX43PL6-ORWknmuoPrah7QV0oKCTCeFsxBQlbJwlzpPaWBFSCRI9aWAJahZodK2pq7BPFFspmy9wprJXasxEg"
}

Failed Response:

HTTP/1.1 401 Unauthorized
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

{
    "code": 401,
    "message": "Invalid credentials."
}

Yeni Sipariş Oluşturma

Gönderilen: (orderCode, productid, quantity, address, shippingDate) ve JWT Elde edilen: Siparişin oluşturulması

userid = JWT'ye göre belirlenecek

Request:

POST /addorder HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: xy

{
    "orderCode": "orderCode_example",
    "productId": 1,
    "quantity": 10,
    "address": "address_example",
    "shippingDate": "2020-10-17 12:42:45"
}

Successful Response:

HTTP/1.1 201 Created
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

{
    "id": 1,
    "userId": 1,
    "orderCode": "orderCode_example",
    "productId": "1",
    "quantity": "10",
    "address": "address_example",
    "shippingDate": "2020-10-17T12:42:45+03:00"
}

Failed Response:

HTTP/1.1 500 Server Error
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

{
    "code": 500,
    "message": "Integrity constraint violation: 1062 Duplicate entry 'orderCode_example' for key 'UNIQ_E52FFDEE3AE40A8F'"
}

Siparişi güncelleme

Gönderilen: (orderCode, productid, quantity, address, shippingDate) ve JWT Elde edilen: Siparişin güncellemesi

orderCode göre güncelleme yapılır. ShippingDate gelmediyse, gönderilen parametreler güncellenir.

Request:

PUT /updateorder HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: xy

{
    "orderCode": "orderCode_example",
    "productId": 3,
    "quantity": 10,
    "address": "address_example",
    "shippingDate": "2020-10-17 12:42:45"
}

Successful Response:

HTTP/1.1 200 OK
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

ShippingDate Geldiyse

{
    "id": 1,
    "userId": 1,
    "orderCode": "orderCode_example",
    "productId": "3",
    "quantity": "10",
    "address": "address_example",
    "shippingDate": "2020-10-17T12:42:45+03:00"
}


ShippingDate Gelmediyse
{
    "now_datetime": "2020-10-17 11:11:11",
    "shipping_date": "2020-10-14 12:42:45",
    "result": "shippingdate gelmedi, update yapılamadi."
}

Failed Response:

HTTP/1.1 500 Server Error
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

{
    "code": 500,
    "message": "Notice: Undefined index: (yanlis gönderilen parametreler keyleri veya gönderilmeyen parametreler)"
}

Sipariş detayını görme

Gönderilen: (orderCode) ve JWT Elde edilen: Siparişin detayları

orderCode ait sipariş response edilir.

Request:

GET /detailorder?orderCode=orderCodeExample HTTP/1.1

Successful Response:

HTTP/1.1 200 OK
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

{
    "order": [
        {
            "id": 1,
            "userid": 2,
            "orderCode": "orderCodeExample2",
            "productId": 1,
            "quantity": 10,
            "adress": "adressExample",
            "shippingDate": {
                "date": "2020-10-18 12:42:45.000000",
                "timezone_type": 3,
                "timezone": "Europe/Istanbul"
            }
        }
    ]
}

Failed Response:

HTTP/1.1 404 Cannot be found
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

{
    "code": 404,
    "message": "No order found"
}

Tüm siparişlerini listeleme

Gönderilen: JWT Elde edilen: Tüm siparişler

Request:

GET /orders HTTP/1.1

Successful Response:

HTTP/1.1 200 OK
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

{
    "orders": [
        {
            "id": 1,
            "userid": 2,
            "orderCode": "orderCodeExample2",
            "productId": 1,
            "quantity": 10,
            "adress": "adressExample",
            "shippingDate": {
                "date": "2020-10-18 12:42:45.000000",
                "timezone_type": 3,
                "timezone": "Europe/Istanbul"
            }
        },
        {
            "id": 3,
            "userid": 2,
            "orderCode": "orderCodeExample23",
            "productId": 1,
            "quantity": 10,
            "adress": "address_example",
            "shippingDate": {
                "date": "2020-10-17 12:42:45.000000",
                "timezone_type": 3,
                "timezone": "Europe/Istanbul"
            }
        },
        {
            "id": 5,
            "userid": 2,
            "orderCode": "orderCodeExample234",
            "productId": 1,
            "quantity": 10,
            "adress": "address_example",
            "shippingDate": {
                "date": "2020-10-17 12:42:45.000000",
                "timezone_type": 3,
                "timezone": "Europe/Istanbul"
            }
        }
    ]
}

Failed Response:

HTTP/1.1 404 Cannot be found
Server: My RESTful API
Content-Type: application/json
Content-Length: xy

{
    "code": 404,
    "message": "No orders found"
}

Releases

No releases published

Packages

No packages published

Languages

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy