🍜
Ramen API Ramen API is a free Web API about
You can try Ramen API with this code.
fetch('https://ramen-api.dev/shops/yoshimuraya')
.then((res) => res.json())
.then((json) => console.log(json.shop.name)) // => 吉村家
This repository manages the source code and the content including photos.
You might want to say why Ramen? And, I will say.
Features
-
🌟 Support REST API and GraphQL. -
🖼️ We can get an information of Ramen shops and their rich photos. -
🆓 Completely free. -
🧑💻 You can contribute by adding Ramen content.
Information
- Currently, Ramen API is a beta version. There's a possibility that API may be changed.
- You should show the credit like "powered by Ramen API" on your page and link to this GitHub repository.
- The information of Ramen shops and photos are distributed under the Creative Commons copyright license CC/BY.
- If you want to use photos in your application publicly, you should show the author
id
orname
of the photos as the credit. - Authentication is not required.
- There is no rate-limitation.
Base URL
https://ramen-api.dev
REST API
Global parameters
pretty
- Flag of JSON pretty printing.
/shops
GET Parameters
page
- default is1
.perPage
- default is10
. Maximum value is100
.
Examples
GET /shops?pretty&page=1&perPage=3
{
"shops": [
{
"id": "yoshimuraya",
"name": "吉村家",
"photos": [
{
"name": "yoshimuraya-001.jpg",
"width": 1200,
"height": 900,
"authorId": "yusukebe",
"url": "https://ramen-api.dev/images/yoshimuraya/yoshimuraya-001.jpg"
}
]
},
{
"id": "sugitaya",
"name": "杉田家",
"photos": [
{
"name": "sugitaya-001.jpg",
"width": 1200,
"height": 900,
"authorId": "yusukebe",
"url": "https://ramen-api.dev/images/sugitaya/sugitaya-001.jpg"
}
]
},
{
"id": "takasagoya",
"name": "たかさご家",
"photos": [
{
"name": "takasagoya-001.jpg",
"width": 1200,
"height": 900,
"authorId": "yusukebe",
"url": "https://ramen-api.dev/images/takasagoya/takasagoya-001.jpg"
}
]
}
],
"totalCount": 7,
"pageInfo": {
"nextPage": 2,
"prevPage": null,
"lastPage": 3,
"perPage": 3,
"currentPage": 1
}
}
/shops/{shopId}
GET Examples
GET /shops/yoshimuraya
{
"shop": {
"id": "yoshimuraya",
"name": "吉村家",
"photos": [
{
"name": "yoshimuraya-001.jpg",
"width": 1200,
"height": 900,
"author": "yusukebe",
"url": "https://ramen-api.dev/images/yoshimuraya/yoshimuraya-001.jpg"
}
]
}
}
/authors/{authorId}
GET Examples
GET /authors/yusukebe
{
"author": {
"id": "yusukebe",
"name": "Yusuke Wada",
"url": "https://github.com/yusukebe"
}
}
Errors
Not Found
HTTP Status code is 404
.
Sample response:
{
"errors": [
{
"message": "The requested Ramen Shop 'foo' is not found"
}
]
}
GraphQL
Ramen API supports a GraphQL.
Endpoint
https://ramen-api.dev/graphql
Schemas
Shop
type Shop {
id: String
name: String
photos: [Photo]
}
Photo
type Photo {
name: String
url: String
width: Int
height: Int
authorId: String
}
Author
type Author {
id: String
name: String
url: String
}
Queries
shop
query {
shop(id: "yoshimuraya") {
id
name
photos {
name
width
height
url
authorId
}
}
}
shops
query {
shops(first: 1, after: "eW9zaGltdXJheWE=") {
edges {
node {
id
name
}
cursor
}
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
}
}
Or you can set last
and before
args.
query {
shops(last: 1, before: "eW9zaGltdXJheWE=") {
pageInfo {
startCursor
endCursor
hasNextPage
hasPreviousPage
}
}
}
author
query {
author(id: "yusukebe") {
id
name
url
}
}
Contribution
You can contribute by adding Ramen content to this project. Not only by writing code.
Adding a new shop
clone
1. Fork & Fork this repository and clone
it.
2. Edit the author information
If this is first time, you should write about you.
mkdir ./content/authors/{authorId}
touch ./content/authors/{authorId}/info.json
Edit ./content/authors/{authorId}/info.json
like this:
{
"id": "yusukebe", // <-- must be /^[0-9a-zA-Z\-\_]+$/
"name": "Yusuke Wada",
"url": "https://github.com/yusukebe" // <-- must be /^https:\/\/.+$/
}
3. Edit about the Ramen shop
Write the information of the Ramen shop which you want to add.
mkdir ./content/shops/{shopId}
touch ./content/shops/{shopId}/info.json
Edit ./content/shops/{shopId}/info.json
like this:
{
"id": "yoshimuraya", // <-- must be /^[0-9a-z\-]+$/
"name": "吉村家",
"photos": [
{
"name": "yoshimuraya-001.jpg", // <-- must be /^[0-9a-z\-\.]+\.(jpg|jpeg|png|gif)$/
"width": 1200, // <-- must be number
"height": 900, // <-- must be number
"authorId": "yusukebe" // <-- must be /^[0-9a-zA-Z\-\_]+$/
}
]
}
4. Add Photo
Add your Ramen photos to an appropriate path such as ./content/shops/{shopId}/{photoName}
.
cp IMG_001.JPG ./content/shops/{shopId}/{photoName}
shopId
to shops.json
5. Add At the end, edit ./content/shops.json
to add the shop id at the last line.
{
"shopIds": [
"yoshimuraya",
"sugitaya",
"takasagoya",
"jyoujyouya",
"torakichiya",
"rasuta",
"new-shop-id" // <--- add the id at the last line
]
}
6. Pull Request
Create Pull Request to this repository.
Notices
- Do not upload a big size photo. Should be under 300KB.
- An information about the shop and photos that you have been uploaded will be licensed by Creative Commons copyright license CC/BY.
Tips
Resize & Optimize photos
Resize:
sips -Z 800 yoshimuraya-001.jpg
Get the image size:
sips -g pixelHeight -g pixelWidth yoshimuraya-001.jpg
Remove Exif and optimize the image:
jpegtran -copy none -optimize -outfile yoshimuraya-001.jpg yoshimuraya-001.jpg
Projects using Ramen API
- yusukebe/ramen-api-example - An example web pages with React and Cloudflare Workers.
Author
Yusuke Wada https://github.com/yusukebe
License
Application source code is distributed under the MIT license.
Ramen resources including the photos are distributed under the Creative Commons copyright license CC/BY.