# Planet RESTful API
Please refer to PlanetAPIController.swift mark *Planet Public API* for more details.
### List all my Planets: ```GET /v0/planets/my```
```
curl -X GET http://localhost:8086/v0/planets/my
```
Returns:
```
[
{
"id": "9191EE94-312A-466D-979A-9BEC7D0F450A",
"name": "Hello Planet",
"about": "Say hi to planet",
...
}
]
```
### Create a new Planet: ```POST /v0/planets/my```
Inputs:
- name: String
- about: String
- template: String
- avatar: Image file in JPEG, PNG, GIF format, 5MB max.
Parameter title is required.
```
curl -X POST http://localhost:8086/v0/planets/my \
-H 'Content-Type: multipart/form-data' \
-F 'name=New Planet' \
-F 'about=Say hi to planet' \
-F 'template=Grid' \
-F 'avatar=@/path/to/image.jpg'
```
Returns:
```
{
"id": "12345678-312A-466D-979A-9BEC7D0F450A",
"name": "New Planet",
"about": "Say hi to planet",
...
}
```
### Info of a specific planet: ```GET /v0/planets/my/:uuid```
```
curl -X GET http://localhost:8086/v0/planets/my/12345678-312A-466D-979A-9BEC7D0F450A
```
Returns:
```
{
"id": "12345678-312A-466D-979A-9BEC7D0F450A",
"name": "New Planet",
"about": "Say hi to planet",
...
}
```
### Modify my Planet: ```POST /v0/planets/my/:uuid```
Inputs:
- name: String
- about: String
- template: String
- avatar: Image file in JPEG, PNG, GIF format, 5MB max.
```
curl -X POST http://localhost:8086/v0/planets/my/12345678-312A-466D-979A-9BEC7D0F450A \
-H 'Content-Type: multipart/form-data' \
-F 'name=Updated New Planet' \
-F 'avatar=@/path/to/image.jpg'
```
Returns:
```
{
"id": "12345678-312A-466D-979A-9BEC7D0F450A",
"name": "Updated New Planet",
"about": "Say hi to planet",
...
}
```
### Delete my Planet: ```DELETE /v0/planets/my/:uuid```
```
curl -X DELETE http://localhost:8086/v0/planets/my/12345678-312A-466D-979A-9BEC7D0F450A
```
Returns:
```
{
"id": "12345678-312A-466D-979A-9BEC7D0F450A",
"name": "Updated New Planet",
"about": "Say hi to planet",
...
}
```
### Publish my Planet: ```POST /v0/planets/my/:uuid/publish```
```
curl -X POST http://localhost:8086/v0/planets/my/12345678-312A-466D-979A-9BEC7D0F450A/publish
```
Returns:
```
{
"id": "12345678-312A-466D-979A-9BEC7D0F450A",
"name": "Updated New Planet",
"about": "Say hi to planet",
...
}
```
### Expose public content built: ```GET /v0/planets/my/:uuid/public```
Note:
Public content resources available at:
- ```GET /:planet_uuid/avatar.png```
- ```GET /:planet_uuid/:article_uuid/attachment_image.png```
```
curl -X GET http://localhost:8086/v0/planets/my/12345678-312A-466D-979A-9BEC7D0F450A/public
```
Returns:
```
...
```
### List articles under My Planet: ```GET /v0/planets/my/:uuid/articles```
```
curl -X GET http://localhost:8086/v0/planets/my/12345678-312A-466D-979A-9BEC7D0F450A/articles
```
Returns:
```
[
{
"id": "12345678-312A-466D-979A-9BEC7D0F450A",
"title": "Hello Article",
"content": "Say hi to article",
...
}
]
```
### Create a new Article: ```POST /v0/planets/my/:uuid/articles```
Inputs:
- title: String
- date: String
- content: String
- attachments: file at any supported type, 50MB max in total.
Parameter title or content is required; Parameter date is optional in ISO 8601 format.
```
curl -X POST http://localhost:8086/v0/planets/my/12345678-312A-466D-979A-9BEC7D0F450A/articles \
-H 'Content-Type: multipart/form-data' \
-F 'title=New Article' \
-F 'date=2024-12-01T15:00:00Z' \
-F 'content=Say hi to article.
' \
-F 'attachments[0]=@/path/to/image.jpg'
```
Returns:
```
{
"id": "12345678-1234-466D-979A-9BEC7D0F450A",
"title": "New Article",
"content": "Say hi to article.
",
...
}
```
### Get an article: ```GET /v0/planets/my/:planet_uuid/articles/:article_uuid```
```
curl -X GET http://localhost:8086/v0/planets/my/12345678-312A-466D-979A-9BEC7D0F450A/articles/12345678-1234-466D-979A-9BEC7D0F450A
```
Returns:
```
{
"id": "12345678-312A-466D-979A-9BEC7D0F450A",
"title": "New Article",
"content": "Say hi to article.
",
...
}
```
### Modify an article: ```POST /v0/planets/my/:planet_uuid/articles/:article_uuid```
Inputs:
- title: String
- date: String
- content: String
- attachments: file at any supported type, 50MB max in total.
```
curl -X POST http://localhost:8086/v0/planets/my/12345678-312A-466D-979A-9BEC7D0F450A/articles/12345678-1234-466D-979A-9BEC7D0F450A \
-H 'Content-Type: multipart/form-data' \
-F 'title=Updated Article' \
-F 'content=Say hi to article.
'
```
Returns:
```
{
"id": "12345678-1234-466D-979A-9BEC7D0F450A",
"title": "Updated Article",
"content": "Say hi to article.
",
...
}
```
### Delete an article: ```DELETE /v0/planets/my/:planet_uuid/articles/:article_uuid```
```
curl -X DELETE http://localhost:8086/v0/planets/my/12345678-312A-466D-979A-9BEC7D0F450A/articles/12345678-1234-466D-979A-9BEC7D0F450A
```
Returns:
```
{
"id": "12345678-1234-466D-979A-9BEC7D0F450A",
"title": "Updated Article",
"content": "Say hi to article.
",
...
}
```
### Search My Planets and articles: ```GET /v0/search?q=```
Searches across My Planets (by name and about) and their articles (by title, slug, tags, attachments, and content). Case-insensitive and diacritics-insensitive.
```
curl -X GET http://localhost:8086/v0/search?q=hello
```
Returns:
```
{
"planets": [
{
"id": "12345678-312A-466D-979A-9BEC7D0F450A",
"name": "Hello World Blog",
"about": "Say hi to planet",
"created": "2024-01-15T10:30:00Z",
"updated": "2024-06-20T14:22:00Z"
}
],
"articles": [
{
"articleID": "12345678-1234-466D-979A-9BEC7D0F450A",
"articleCreated": "2024-06-19T09:15:00Z",
"title": "Hello from Planet",
"preview": "this is a hello world post about...",
"planetID": "12345678-312A-466D-979A-9BEC7D0F450A",
"planetName": "Hello World Blog"
}
]
}
```