Questions tagged [api-design]
Application Programming Interface (API) Design discusses best practises for creating libraries intended for general purpose or public use.
1,090
questions
339
votes
14
answers
92k
views
Should you write your back-end as an API?
I had a heated discussion today about our MVC application. We have a website written in MVC (ASP.NET), and it usually follows the pattern of do something in the view -> hit the controller -> ...
193
votes
7
answers
117k
views
How do searches fit into a RESTful interface?
When designing a RESTful interface, the semantics of the request types are deemed vital to the design.
GET - List collection or retrieve element
PUT - Replace collection or element
POST - Create ...
190
votes
4
answers
81k
views
What is an Anti-Corruption layer, and how is it used?
I'm trying to figure out what the Anti-Corruption layer really means. I know that it's a way to transition/work around legacy code or bad APIs. What I don't understand is how it works and what makes ...
130
votes
14
answers
20k
views
Should the solution be as generic as possible or as specific as possible?
Say I have a entity that has "type" attribute. There could be 20+ possible types.
Now I'm asked to implement something that would allow changing the type from A->B, which is the only use case.
So ...
113
votes
5
answers
78k
views
Should I return an HTTP 400 (Bad Request) status if a parameter is syntactically correct, but violates a business rule?
Say that I have a REST endpoint that takes an integer as a parameter:
/makeWaffles?numberOfWaffles=3
In this case, I want the number to be positive because I can't make a negative number of waffles (...
95
votes
8
answers
75k
views
RESTFul: state changing actions
I am planning to build a RESTfull API but there are some architectural questions that are creating some problems in my head. Adding backend business logic to clients is an option that I would like to ...
71
votes
6
answers
77k
views
Many small requests vs. few large requests (API Design)
I'm currently working on a project with an organization as follows:
Client - Gets data from the main server via REST api.
Server - Requests data from various other servers via third-party APIs
Third-...
69
votes
4
answers
26k
views
Why PATCH method is not idempotent?
I was wondering about this.
Suppose I have a user resource with id and name fields.
If I want to update a field I could just do a PATCH request to the resource like this
PATCH /users/42
{"name&...
61
votes
1
answer
72k
views
null vs missing key in REST API Response [closed]
Say in my application, some users give us their last name, and others do not. In a REST API response, which body is preferred:
With a "null" value:
{"firstName": "Bob",
"lastName": null}
Or just a ...
57
votes
14
answers
65k
views
RESTful API design. What should I return if there are no rows?
I'm currently coding an API for a social network with the Slim Framework. My question is: What are the best practices when there are no rows to return in the json structure?
Lets say that this call /...
54
votes
7
answers
9k
views
Why do so many standards for JSON API response formats contain a "success" property in the response body instead of just using HTTP status codes?
I was researching about best practices for standardised JSON response formats for APIs, according to various sources available online general consensus looks something like this:
//Successful request:...
54
votes
2
answers
55k
views
REST API - Should API Return Nested JSON Objects?
When it comes to JSON APIs is it good practice to flatten out responses and avoid nested JSON objects?
As an example lets say we have an API similar to IMDb but for video games. There are a couple ...
53
votes
3
answers
39k
views
Should Microservices talk to each other?
I'm designing an application using Micro-Services and I'm unsure on the best mechanism to use to collect data from multiple services.
I believe there are two options:
Integrate an 'inter-service' ...
52
votes
10
answers
19k
views
What should be the http status code for "Service not available in your area" error?
Our service is in 5 cities right now. If someone tries to call our service API from any other city, we want to throw this error Service not available in your area.
The question is, what is the ...
52
votes
9
answers
12k
views
Should you guard against unexpected values from external APIs?
Lets say you are coding a function that takes input from an external API MyAPI.
That external API MyAPI has a contract that states it will return a string or a number.
Is it recommended to guard ...
48
votes
11
answers
77k
views
Should a REST API return a 500 Internal Server Error to indicate that a query references an object that does not exist?
I am working with a REST API which resides on a server that handles data for a multitude of IoT devices.
My task is to query the server using the API to collect specific performance information about ...
48
votes
4
answers
12k
views
What's so bad about the DOM?
I keep hearing people (Crockford in particular) saying the DOM is a terrible API, but not really justifying this statement. Apart from cross-browser inconsistencies, what are some reasons why the DOM ...
47
votes
2
answers
69k
views
REST API Design: Multiple calls vs. single call to the API
We are developing a Rest API for eCommerce website which will be consumed by mobile apps.
In the home page of an app we need to call multiple resources like Sliders, Top Brands, Best Selling Products,...
45
votes
6
answers
7k
views
How necessary is it to follow defensive programming practices for code that will never be made publicly available?
I'm writing a Java implementation of a card game, so I created a special type of Collection I'm calling a Zone. All modification methods of Java's Collection are unsupported, but there's a method in ...
44
votes
8
answers
151k
views
Why does java.util.ArrayList allow to add null?
I wonder why java.util.ArrayList allows to add null. Is there any case where I would want to add null to an ArrayList?
I am asking this question because in a project we had a bug where some code was ...
44
votes
5
answers
27k
views
How does a REST API fit for a command/action based domain?
In this article the author claims that
Sometimes, it is required to expose an operation in the API that inherently is non RESTful.
and that
If an API has too many actions, then that’s an ...
43
votes
6
answers
82k
views
Should an HTTP API always return a body?
Is there some sort of standard regarding HTTP API responses?
After reading this discourse thread I started to wonder. We are developing our public HTTP JSON API at my work, and we do not return ...
42
votes
1
answer
7k
views
How to design a REST API that can "prompt" the client about long-running operations?
Say you were to develop a REST API that provides access to a set of complex, long-running, operations.
The typical paradigm for an API like this (as I understand it) usually involves (the client) ...
42
votes
3
answers
25k
views
Recommended HTTP status code for "plan limit exceeded" response
I'm designing a REST API for a project where users are always on one of several "plans" - each plan defines some resource limits, such as the max number of users an account may have or the max number ...
38
votes
6
answers
7k
views
Is there a pattern for handling conflicting function parameters?
We have an API function that breaks down a total amount into monthly amounts based on given start and end dates.
// JavaScript
function convertToMonths(timePeriod) {
// ... returns the given time ...
38
votes
5
answers
6k
views
How to describe an architectural shift that intentionally breaks REST standards?
I'm proposing changes to a very poorly architected software project that suffers from a multitude of problems. At a high level the project utilizes Angular on the front-end and consumes various REST ...
37
votes
7
answers
17k
views
How do I convince my boss to use REST over SOAP? [duplicate]
We need to create an API to our system. How do I convince my boss that REST is a better option than SOAP (or XML-RPC)?
I say REST is...
easier to implement and maintain
not much new to learn -- ...
34
votes
3
answers
54k
views
Is it OK to return HTML from a JSON API?
On my current project I am responsible for the implementation of a service which involves the consumption of newly created RESTful APIs, documented as solely supporting JSON.
The client consistently ...
33
votes
3
answers
22k
views
What is the best pattern for adding an existing item to a collection in REST API?
I'm designing a pragmatic REST API and I'm a little stuck on how best to add existing entities to a collection. My domain model includes a Project that has a collection of Sites. This is a strict many-...
32
votes
10
answers
10k
views
Why is Math.Sqrt() a static function?
In a discussion about static and instance methods, I always think, that Sqrt() should be a instance method of number types instead of a static method. Why is that? It obviously works on a value.
// ...
32
votes
4
answers
10k
views
Microservices and data storage
I'm considering moving a monolithic REST API to a microservice architecture, and I'm getting a bit confused about data storage.
As I see it, some of the benefits of microservices would be:
...
30
votes
3
answers
19k
views
Is there a list of common usernames to reserve in a new system?
I need to reserve usernames in my new website.
These generally fall into three categories
1) usernames no-one should have (eg: admin, user, service, help, root, etc)
2) names of super famous people ...
29
votes
5
answers
42k
views
Function returning true/false vs. void when succeeding and throwing an exception when failing
I'm building an API, a function that uploads a file. This function will return nothing/void if the file was uploaded correctly and throws an exception when there was some problem.
Why an exception ...
29
votes
3
answers
8k
views
Is it Good Practice to Only Expose Interfaces
I''m working on a C# library where the API provides several public interfaces and a single concrete factory class (itself an interface implementation). This factory provides implementations of the ...
29
votes
5
answers
34k
views
How best do you represent a bi-directional sync in a REST api?
Assuming a system where there's a Web Application with a resource, and a reference to a remote application with another similar resource, how do you represent a bi-directional sync action which ...
28
votes
3
answers
18k
views
When should I use string_view in an interface?
I'm using an internal library that was designed to mimic a proposed C++ library, and sometime in the past few years I see its interface changed from using std::string to string_view.
So I dutifully ...
28
votes
6
answers
14k
views
Why use an opaque "handle" that requires casting in a public API rather than a typesafe struct pointer?
I'm evaluating a library whose public API currently looks like this:
libengine.h
/* Handle, used for all APIs */
typedef size_t enh;
/* Create new engine instance; result returned in handle */
int ...
27
votes
2
answers
18k
views
Should I make up my own HTTP status codes? (a la Twitter 420: Enhance Your Calm)
I'm currently implementing an HTTP API, my first ever.
I've been spending a lot of time looking at the Wikipedia page for HTTP status codes, because I'm determined to implement the right codes for ...
26
votes
3
answers
9k
views
RESTful API: HTTP verbs with shared or specific URLs?
While creating a RESTful API, should I use HTTP Verbs on the same URL (when it's possible) or should I create an specific URL per action?
For example:
GET /items # Read all items
GET /...
26
votes
10
answers
7k
views
API design: concrete vs. abstract approach - best practices?
When discussing APIs between systems (on the business level) there are often two different point of views in our team: some people prefer a more - lets say - generic abstract approach, other a ...
25
votes
4
answers
3k
views
When creating an api should I stick with small functions and many calls, or a few calls and large functions?
I have a rails platform that I maintain. It has a lot of different web applications built on top of it. However now a client is asking for an API so that they can keep users on their site, but take ...
21
votes
9
answers
7k
views
Declaring that a function never returns
If I have a function that never returns (it contains an infinite loop) how do I declare/communicate that it will never return to the user of the function?
The user does not see the source code, only ...
21
votes
4
answers
54k
views
MVC and RESTful API service
MVC is pretty straightforward. There is a Model, a Controller and a View. When we create a website, it all come together as 'client sends REST keyword request to server -> the server matches the ...
20
votes
8
answers
2k
views
"Public APIs are forever: Only one chance to get it right"?
In an OS book I just read that, "Public APIs are forever: Only one chance to get it right". Is it true? Is it applicable only in APIs of Operating Systems or other APIs too? For example, will this be ...
20
votes
2
answers
2k
views
Should one always know what an API is doing just by looking at the code?
Recently I have been developing my own API and with that invested interest in API design I have been keenly interested how I can improve my API design.
One aspect that has come up a couple times is (...
20
votes
1
answer
4k
views
Why were Null-Safe Operators (e.g. "Elvis operator") rejected as part of Java 7's "Project Coin"?
One of the proposed features for Java 7's "Project Coin" was the "Elvis operator". A report of a 2009 JavaOne presentation on Project Coin described it as such:
One of the "small features" covered ...
19
votes
4
answers
8k
views
Why does the Java collections APIs not have a last method? [closed]
This is for ordered collections e.g. java.util.List. Why did the language designers not include a last method? The only reasons I can think of are:
ambiguity when the collection is empty (return null ...
19
votes
1
answer
16k
views
RESTful API and i18n: how to design the response?
We are designing a RESTful API that is mainly intended to meet the needs of a single client. Because of its very particular circumstances, this client has to make as few requests as possible.
The ...
19
votes
2
answers
17k
views
When to use nested resources in a RESTful API
I have two resources: users and links.
Users can have several links associated with them. I have designed my RESTful API so that you can reach the links associated with a user at the following URI:
/...
19
votes
3
answers
20k
views
Should backend IDs be public or not on a REST API?
Based on what this guy says: http://toddfredrich.com/ids-in-rest-api.html
Let assume he is right about using UUID to identify the api resources. Then I run into troubles trying to implementing it ...