Projetar uma boa API é uma arte. A boa API é apreciada mesmo após o tempo passar. Na minha opinião, não deve haver viés geral na linha abstrato-concreto. Alguns parâmetros podem ser tão concretos quanto os dias da semana, alguns precisam ser projetados para serem extensíveis (e é bastante estúpido torná-los concretos, por exemplo, parte dos nomes das funções), mas outros podem ir ainda mais longe e ter uma aparência elegante. A API precisa fornecer retornos de chamada ou mesmo linguagem específica do domínio ajudará a combater a complexidade.
Raramente acontecem coisas novas sob a lua. Dê uma olhada na arte anterior, especialmente padrões e formatos estabelecidos (por exemplo, muitas coisas podem ser modeladas após feeds, descrições de eventos foram elaboradas em ical / vcal). Torne sua API facilmente aditiva, onde entidades frequentes e onipresentes são concretas e extensões previstas são dicionários. Existem também alguns padrões bem estabelecidos para lidar com situações específicas. Por exemplo, o tratamento de solicitações HTTP (e similares) pode ser modelado na API com objetos de Solicitação e Resposta.
Antes de projetar a API, faça um brainstorming sobre aspectos, incluindo aqueles que não serão incluídos, mas você deve estar ciente. Exemplos disso são idioma, direção da escrita, codificação, localidade, informações de fuso horário e similares. Preste atenção nos locais onde múltiplos podem aparecer: use list, e não um valor único para eles. Por exemplo, se você deseja a API para o sistema de videochat, sua API será muito mais útil, se você assumir N participantes, não apenas dois (mesmo que suas especificações no momento sejam essas).
Às vezes, ser abstrato ajuda a reduzir drasticamente a complexidade: mesmo se você projetar uma calculadora para adicionar apenas 3 + 4, 2 + 2 e 7 + 6, pode ser muito mais simples implementar X + Y (com limites tecnicamente viáveis em X e Y e inclua ADD (X, Y) na sua API em vez de ADD_3_4 (), ADD_2_2 (), ...
Em suma, escolher um caminho ou outro é apenas um detalhe técnico. Sua documentação deve descrever casos de uso frequentes de maneira concreta.
Tudo o que você faz no lado da estrutura de dados, forneça um campo para uma versão da API.
Para resumir, a API deve minimizar a complexidade ao lidar com seu software. Para apreciar a API, o nível de complexidade exposta deve ser adequado. A decisão sobre a forma da API depende muito da estabilidade do domínio do problema. Portanto, deve haver uma estimativa de qual direção o software e sua API crescerão, pois essas informações podem afetar a equação da complexidade. Além disso, a criação da API está lá para as pessoas entenderem. Se houver boas tradições na área de tecnologia de software em que você está, tente não se desviar muito delas, pois isso ajudará a entender. Leve em conta para quem você escreve. Usuários mais avançados apreciarão a generalidade e a flexibilidade, enquanto aqueles com menos experiência podem se sentir mais à vontade com o concreto. No entanto, cuide da maioria dos usuários da API,
No lado da literatura, posso recomendar que os principais programadores do "Beautiful Code" expliquem como pensam Por Andy Oram, Greg Wilson, enquanto penso que a beleza é sobre perceber a otimização oculta (e a adequação para algum propósito).