HTTP Methods

Complete guide about HTTP methods (GET, POST, PUT, DELETE, etc.) in moclojer. Learn when to use each method and how to implement correct RESTful APIs.

HTTP methods (also called HTTP verbs) define the action you want to perform on a resource. Choosing the correct method is essential for creating semantic and consistent RESTful APIs.

Supported Methods

Moclojer supports all standard HTTP methods:

Method
Purpose
IdempotentΒΉ
SafeΒ²

GET

Read data

βœ…

βœ…

POST

Create data

❌

❌

PUT

Update/Replace

βœ…

❌

PATCH

Update partially

❌

❌

DELETE

Remove data

βœ…

❌

HEAD

Get headers (no body)

βœ…

βœ…

OPTIONS

Discover allowed methods

βœ…

βœ…

ΒΉ Idempotent: Multiple identical calls have the same effect as a single call Β² Safe: Doesn't modify data (read-only)

Syntax in Moclojer

- endpoint:
    method: GET      # Specifies the HTTP method
    path: /users
    response:
      status: 200
      body: "..."

Default: If you omit method, moclojer uses GET.

GET - Read Data

Purpose: Retrieve data without modifying it.

Characteristics:

  • Safe: Doesn't change data on server

  • Idempotent: Multiple calls return the same result

  • Cacheable: Responses can be cached

  • No body: Should not have body in request

Example: List Resources

Usage:

Example: Get Specific Resource

Usage:

GET with Query Parameters

Usage:

When to Use GET

βœ… Use GET for:

  • List resources (GET /users)

  • Get details (GET /users/123)

  • Search/filter (GET /search?q=term)

  • Export data (GET /reports/sales)

❌ Don't use GET for:

  • Create resources (use POST)

  • Update resources (use PUT/PATCH)

  • Delete resources (use DELETE)

  • Operations with side effects


POST - Create Data

Purpose: Create new resources or process data.

Characteristics:

  • Not idempotent: Multiple calls create multiple resources

  • Not safe: Modifies server state

  • With body: Usually sends data in body

  • Returns 201: "Created" status when successful

Example: Create Resource

Usage:

Response:

POST for Custom Actions

Usage:

When to Use POST

βœ… Use POST for:

  • Create new resources (POST /users)

  • File uploads (POST /upload)

  • Custom actions (POST /users/123/activate)

  • Complex processing (POST /calculate)

  • When operation is not idempotent

❌ Don't use POST for:

  • Reading data (use GET)

  • Complete update (use PUT)

  • Removal (use DELETE)


PUT - Update/Replace

Purpose: Completely replace an existing resource.

Characteristics:

  • Idempotent: Multiple calls have the same effect

  • Complete replacement: All fields must be sent

  • Requires ID: Usually used with /resource/:id

  • Returns 200: "OK" status when updated

Example: Update Complete Resource

Usage:

PUT vs POST

PUT is idempotent:

POST is not idempotent:

When to Use PUT

βœ… Use PUT for:

  • Update complete resource (PUT /users/123)

  • Replace settings (PUT /settings)

  • Idempotent update operations

❌ Don't use PUT for:

  • Create resources (use POST)

  • Partial update (use PATCH)

  • Collections (PUT /users doesn't make sense)


PATCH - Update Partially

Purpose: Update only some fields of a resource.

Characteristics:

  • Partial: Send only fields that changed

  • More efficient: Less data transferred

  • Not necessarily idempotent: Depends on implementation

Example: Partial Update

Usage:

PATCH vs PUT

Aspect
PUT
PATCH

Scope

Replace complete resource

Update specific fields

Fields

All fields required

Only fields that change

Idempotent

Yes

Depends

Example

PUT /users/1 (all data)

PATCH /users/1 (only email)

When to Use PATCH

βœ… Use PATCH for:

  • Update few fields (PATCH /users/123)

  • Toggle flags (PATCH /posts/1 {"published": true})

  • Partial edit operations

❌ Don't use PATCH for:

  • Replace complete resource (use PUT)

  • Create resources (use POST)


DELETE - Remove Data

Purpose: Remove a resource.

Characteristics:

  • Idempotent: Deleting multiple times = deleting once

  • No body in response: Usually returns 204 No Content

  • Irreversible: (in real APIs, consider soft delete)

Example: Delete Resource

Usage:

DELETE with Confirmation

DELETE for Resource Not Found

When to Use DELETE

βœ… Use DELETE for:

  • Remove resources (DELETE /users/123)

  • Clear data (DELETE /cache)

  • Logout (DELETE /sessions/current)

❌ Don't use DELETE for:

  • Reading (use GET)

  • Updating (use PUT/PATCH)

  • Actions that don't remove data


HEAD - Get Metadata

Purpose: Get response headers without the body.

Characteristics:

  • Identical to GET, but no body in response

  • Useful for checking if resource exists

  • Check file size before downloading

Example

Usage:

When to Use HEAD

βœ… Use HEAD for:

  • Check if resource exists

  • Check Last-Modified or ETag

  • See file size (Content-Length)


OPTIONS - Discover Allowed Methods

Purpose: Discover which HTTP methods are supported.

Characteristics:

  • Used in CORS preflight requests

  • Returns allowed methods in Allow header

Example

Usage:

CORS Preflight

Browsers automatically make OPTIONS before "complex" requests:


Multiple Methods, Same Path

You can have the same path with different methods:

Result:

  • GET /users β†’ lists users

  • POST /users β†’ creates user

  • DELETE /users β†’ removes all (careful!)


Complete RESTful API

Example of complete CRUD:


Status Codes by Method

Method
Success
Common Error

GET

200 OK

404 Not Found

POST

201 Created

400 Bad Request, 422 Unprocessable

PUT

200 OK

404 Not Found, 400 Bad Request

PATCH

200 OK

404 Not Found, 400 Bad Request

DELETE

204 No Content

404 Not Found

HEAD

200 OK

404 Not Found

OPTIONS

200 OK

-


Best Practices

βœ… Do

  1. Use the correct semantic method

  2. GET and HEAD should not modify data

  3. Use appropriate status codes

  4. Implement OPTIONS for CORS

❌ Avoid

  1. Methods in URL

  2. POST for everything


Next Steps

See Also

Last updated

Was this helpful?