<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Özgür Adem Işıklı</title>
    <description>The latest articles on DEV Community by Özgür Adem Işıklı (@iozguradem).</description>
    <link>https://dev.to/iozguradem</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F371754%2F8c11f5a8-7d79-44dc-898f-29c9150ceab9.jpg</url>
      <title>DEV Community: Özgür Adem Işıklı</title>
      <link>https://dev.to/iozguradem</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/iozguradem"/>
    <language>en</language>
    <item>
      <title>What is Axe API</title>
      <dc:creator>Özgür Adem Işıklı</dc:creator>
      <pubDate>Thu, 20 Jul 2023 11:24:18 +0000</pubDate>
      <link>https://dev.to/iozguradem/what-is-axe-api-53fp</link>
      <guid>https://dev.to/iozguradem/what-is-axe-api-53fp</guid>
      <description>&lt;p&gt;A Rest API consists of two components: common elements that require time and effort, such as best practices and shared features, and custom logic that distinguishes one API from another.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yPw6eh7R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ltcs5szst3tjrx5d00h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yPw6eh7R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7ltcs5szst3tjrx5d00h.png" alt="Axe API Schema" width="800" height="686"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Axe API is a TypeScript-based Node.js framework designed to eliminate the need for repetitive tasks associated with common elements while allowing developers to focus on custom logic. It offers a comprehensive structure for your API, including numerous features and best practices that will save you time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Faster API development
&lt;/h2&gt;

&lt;p&gt;Axe API simplifies the development process of your API by taking care of basic tasks such as routing, validating, querying, and handling HTTP requests.&lt;/p&gt;

&lt;p&gt;This feature allows developers to focus on custom logic while developing their Axe API projects, which results in faster development times.&lt;/p&gt;

&lt;p&gt;Additionally, the framework offers dedicated areas where developers can add their own custom logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model-driven API
&lt;/h2&gt;

&lt;p&gt;Unlike other frameworks, Axe API doesn't require a Controller file. Instead, the framework focuses on your project's model files, which are the most critical aspect of the project.&lt;/p&gt;

&lt;p&gt;Axe API automatically reads and understands your models and their relationships with each other, creating the API without any manual intervention.&lt;/p&gt;

&lt;p&gt;Let's check out the following model;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axe-api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// todo...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you define your model in Axe API, the framework analyzes it and automatically creates all CRUD (Create, Read, Update, Delete) routes for you.&lt;/p&gt;

&lt;p&gt;In addition to creating the routes, Axe API also handles all of the CRUD operations, so you don't need to do anything at all.&lt;/p&gt;

&lt;h2&gt;
  
  
  Securing data input
&lt;/h2&gt;

&lt;p&gt;Security is a top priority for Axe API. To enable clients to add new records to your database table, you must specify which fields can be filled.&lt;/p&gt;

&lt;p&gt;See the example below for reference.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axe-api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;fillable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the provided example, the name and description fields are designated as fillable, meaning that clients can create a new record on your table by submitting an HTTP POST request containing these fields to your API.&lt;/p&gt;

&lt;h2&gt;
  
  
  Automated validation
&lt;/h2&gt;

&lt;p&gt;As a developer, it is crucial to validate all data before creating a new record in the database.&lt;/p&gt;

&lt;p&gt;With Axe API, there is no need to write extensive code in your Controller file. Instead, developers should include validation rules in their model files, and Axe API handles the rest of the validation process.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axe-api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;fillable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;validations&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;required|min:3|max:100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;max:100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;Category&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Axe API provides detailed error messages if a client submits invalid data in an HTTP request.&lt;/p&gt;

&lt;h2&gt;
  
  
  Query your models
&lt;/h2&gt;

&lt;p&gt;After defining the models for your API, your database model is immediately queryable.&lt;/p&gt;

&lt;p&gt;For instance, you can access all the data for the Category model by using the following URL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;GET http://localhost:4000/api/v1/categories?fields&lt;span class="o"&gt;=&lt;/span&gt;name,description
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Frameworks"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Web application development tools."&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"pagination"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"lastPage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"perPage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"currentPage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"from"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"to"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Axe API has built-in pagination support.&lt;/p&gt;

&lt;p&gt;Additionally, developers can utilize various query parameters such as fields, sort, page, and more to obtain optimal results from the API.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://axe-api.com"&gt;https://axe-api.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How to create an Axe API from scratch?</title>
      <dc:creator>Özgür Adem Işıklı</dc:creator>
      <pubDate>Sat, 20 Nov 2021 15:50:08 +0000</pubDate>
      <link>https://dev.to/iozguradem/how-to-create-an-axe-api-from-scratch-2b38</link>
      <guid>https://dev.to/iozguradem/how-to-create-an-axe-api-from-scratch-2b38</guid>
      <description>&lt;h2&gt;
  
  
  What is Axe API?
&lt;/h2&gt;

&lt;p&gt;Axe API is the fastest way to create Rest API by defining only database models and relationships between them. It is built on &lt;a href="https://knexjs.org/"&gt;Knex.js&lt;/a&gt;, and its awesome active records pattern. On the other hand, you have another familiar thing, &lt;a href="https://expressjs.com/"&gt;Express&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Axe API provides you the ability to separate your common tasks to build an API from your business logic. Axe API expects model definitions to analyze your routing structure. After you created your models and their relations between them, Axe API can handle all well-known API requests. Creating an API with 5 tables takes almost 15 minutes.&lt;/p&gt;

&lt;p&gt;Shortly, Axe API performs three basic functions;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyzes your models and their relationships to create routes.&lt;/li&gt;
&lt;li&gt;Handles all HTTP requests.&lt;/li&gt;
&lt;li&gt;Separate your business logic from API best practices.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;Using Axe API in an application is very easy. We've created a CLI tool for you; &lt;a href="https://github.com/axe-api/axe-magic"&gt;axe-magic&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can use the following command to install axe-magic to your machine;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; axe-magic
&lt;span class="nv"&gt;$ &lt;/span&gt;axe-magic &lt;span class="nt"&gt;--version&lt;/span&gt;
1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, creating a new project is very easy. Just you can execute the following command;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;axe-magic new my-api
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install Dependencies
&lt;/h2&gt;

&lt;p&gt;To install your project's depencies, you can execute the following commands in the root directory;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;my-api
&lt;span class="nv"&gt;$ &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Serving The App
&lt;/h2&gt;

&lt;p&gt;To serve this application, you can execute the following command;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;npm run start:dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;start:dev command use &lt;a href="https://www.npmjs.com/package/nodemon"&gt;nodemon&lt;/a&gt;. If you haven't installed it yet, we suggest you install it first.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After that, your first Axe API application will be running in &lt;a href="http://localhost:3000"&gt;localhost:3000&lt;/a&gt;. You will see the following API response if you visit &lt;a href="http://localhost:3000"&gt;localhost:3000&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AXE API"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The best API creation tool in the world."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"aim"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"To kill them all!"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you can see that response, it means that your project is running properly. &lt;/p&gt;

&lt;h2&gt;
  
  
  Learn More
&lt;/h2&gt;

&lt;p&gt;If you want to deep dive to Axe API, you can use the following documents;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/axe-api/axe-api"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://axe-api.github.io/getting-started/introduction/#what-is-axe-api"&gt;What Is Axe API?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/geekculture/a-new-approach-to-create-apis-8fe84e158b4c"&gt;A new approach to create APIs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>opensource</category>
    </item>
    <item>
      <title>A new approach to create APIs</title>
      <dc:creator>Özgür Adem Işıklı</dc:creator>
      <pubDate>Sun, 25 Jul 2021 12:11:38 +0000</pubDate>
      <link>https://dev.to/iozguradem/a-new-approach-to-create-apis-35h5</link>
      <guid>https://dev.to/iozguradem/a-new-approach-to-create-apis-35h5</guid>
      <description>&lt;p&gt;I wanted to put a very &lt;em&gt;simple question&lt;/em&gt; on the table;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Could be there a new approach to create APIs quicker?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Classical Way
&lt;/h3&gt;

&lt;p&gt;Usually, we use some frameworks to create APIs even though they are actually MVC frameworks. Or, if you are a Node.js developer, you can start with a simple Express server. We can pick many different libraries and tools. But, we have two different tasks while developing an API; implementing the business logic and coding the same stuff over and over again.&lt;/p&gt;

&lt;p&gt;After so many years, I asked myself that can I create a robust structure that handles all common features for an API. I mean, a different way or a method...&lt;/p&gt;

&lt;h3&gt;
  
  
  Same and Different Things
&lt;/h3&gt;

&lt;p&gt;Let's think about the APIs which you have been created in your career. Probably, they have some common patterns. At least, an entity -a user entity- should have basic CRUD actions. Also, I am pretty sure that somewhere you need some extended query function on that entity. But it is not simply that. There are several design patterns to use on API designs. We are trying to implement them all as much possible as we can so that we can have good, solid APIs. &lt;/p&gt;

&lt;p&gt;Nevertheless, nobody will use the same API because we have different business logic. So, we should put a breakpoint somewhere to split business logic and shared features.&lt;/p&gt;

&lt;p&gt;After those thoughts, I came up with an idea, which I am working on currently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Define First
&lt;/h3&gt;

&lt;p&gt;Let's think about a user entity. For that entity, you may want different things. For example, you may want the following features;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating a simple CRUD&lt;/li&gt;
&lt;li&gt;Allowing only specific fields for creation and update requests.&lt;/li&gt;
&lt;li&gt;Using some form validations to be sure the user sent the correct data.&lt;/li&gt;
&lt;li&gt;Hiding some secret data from the user such as password hash.&lt;/li&gt;
&lt;li&gt;Developing extended query features.&lt;/li&gt;
&lt;li&gt;Applying some special business logic to the creation process.&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You may add more things to this list but it would be enough to understand my idea. To create an API for the user entity, let's create a model file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;fillable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;validations&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;required|email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;required&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is not an ORM model. It is just a definition of what we want as default features. What if after you create that model, you can get fully working APIs, just by your definition?&lt;/p&gt;

&lt;p&gt;Well, I have been working for a long time to create something like this. It is name &lt;a href="https://axe-api.github.io"&gt;Axe API&lt;/a&gt;, a new way to create Rest APIs quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Axe API&lt;/strong&gt; expects model definitions from you. &lt;em&gt;Axe API&lt;/em&gt; provides a robust, working API when you define models with their features such as validation rules, fillable fields, selected handlers (CRUD), relationships between each other. But not just that. It provides you many escape points to implement your business logic in every step of an HTTP request. As a result of the magic, you can have very extended query features for every model that you have.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;p&gt;Let's look closer and think of a simple model like this;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axe-api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Congrats. You have created your API! That's easy, right? Now you have the basic CRUD requests.&lt;/p&gt;

&lt;p&gt;But, let's add more features. Let's select which fields would be filled by users.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;fillable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;PUT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We didn't just select which fields are fillable. We also selected which fields are fillable in which HTTP requests. Your creating and updating requests are secure now.&lt;/p&gt;

&lt;p&gt;Let's go one step further, and add form validations rules for creation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;fillable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;POST&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="na"&gt;PUT&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="kd"&gt;get&lt;/span&gt; &lt;span class="nx"&gt;validations&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;required|email&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;required|max:50&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Users should send the correct data. &lt;/p&gt;

&lt;p&gt;But now, it is time to think deeper. What if you have two related models such as users and posts. Let's bind them together in the model definition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;User&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hasMany&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Post&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Post&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Model&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;belongsTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;User&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that definition, Axe API will create all related routes for you. Can you believe that you will have the following routes automatically?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET api/users&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST api/users&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET api/users/:id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PUT api/users/:id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DELETE api/users/:id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET api/users/:usedId/posts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POST api/users/:usedId/posts&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET api/users/:usedId/posts/:id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PUT api/users/:usedId/posts/:id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DELETE api/users/:usedId/posts/:id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Business Logic
&lt;/h3&gt;

&lt;p&gt;Probably I can hear you say that "Yeah, it looks nice but we have different kinds of logic. For example, in user creation, I should be able to salt the password."&lt;/p&gt;

&lt;p&gt;But the thing you don't know is Axe API provides hooks for every level of an HTTP request. Let's create a &lt;code&gt;UserHooks.js&lt;/code&gt; file for the model like this;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bcrypt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;onBeforeInsert&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;formData&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Genering salt&lt;/span&gt;
  &lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;salt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;genSaltSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="c1"&gt;// Hashing the password&lt;/span&gt;
  &lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bcrypt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hashSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;formData&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;salt&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;onBeforeInsert&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This function would be triggered by Axe API before the creation process. But not just that. Axe API provides you all the following hooks;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;onBeforeInsert&lt;/li&gt;
&lt;li&gt;onBeforeUpdateQuery&lt;/li&gt;
&lt;li&gt;onBeforeUpdate&lt;/li&gt;
&lt;li&gt;onBeforeDeleteQuery&lt;/li&gt;
&lt;li&gt;onBeforeDelete&lt;/li&gt;
&lt;li&gt;onBeforePaginate&lt;/li&gt;
&lt;li&gt;onBeforeShow&lt;/li&gt;
&lt;li&gt;onAfterInsert&lt;/li&gt;
&lt;li&gt;onAfterUpdateQuery&lt;/li&gt;
&lt;li&gt;onAfterUpdate&lt;/li&gt;
&lt;li&gt;onAfterDeleteQuery&lt;/li&gt;
&lt;li&gt;onAfterDelete&lt;/li&gt;
&lt;li&gt;onAfterPaginate&lt;/li&gt;
&lt;li&gt;onAfterShow&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Extended Query Features
&lt;/h3&gt;

&lt;p&gt;I said before that you can have many benefits to create a framework like this. For example; extended queries. Once you define your model, it would be ready to be queried. You can send a query like the following one;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;GET&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;users&lt;/span&gt;
  &lt;span class="p"&gt;?&lt;/span&gt;&lt;span class="nx"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[[{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;John&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],[{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$or.age.$gt&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$and.id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;666&lt;/span&gt; &lt;span class="p"&gt;}]]&lt;/span&gt;
  &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;fields&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;surname&lt;/span&gt;
  &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;surname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;
  &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="kd"&gt;with&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;comments&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
  &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
  &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;per_page&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this query, you ask the following things;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get data if the &lt;code&gt;name&lt;/code&gt; is "John" OR &lt;code&gt;age&lt;/code&gt; is greater than 18 and the &lt;code&gt;id&lt;/code&gt; is 666.&lt;/li&gt;
&lt;li&gt;Returns only &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;name&lt;/code&gt;, and &lt;code&gt;surname&lt;/code&gt; fields.&lt;/li&gt;
&lt;li&gt;Sort by &lt;code&gt;surname&lt;/code&gt; first (ASC), &lt;code&gt;name&lt;/code&gt; second (DESC).&lt;/li&gt;
&lt;li&gt;Get the related &lt;code&gt;posts&lt;/code&gt; data, with the related &lt;code&gt;comments&lt;/code&gt; data. But in &lt;code&gt;comments&lt;/code&gt; object, just fetch &lt;code&gt;id&lt;/code&gt; and &lt;code&gt;content&lt;/code&gt; fields.&lt;/li&gt;
&lt;li&gt;Fetch 25 row per page.&lt;/li&gt;
&lt;li&gt;Fetch the 2 page.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whenever you create a model, you can have these extended query features. You can't tell you didn't like it!&lt;/p&gt;

&lt;h3&gt;
  
  
  What Is Next?
&lt;/h3&gt;

&lt;p&gt;Well, there are many more features that I can talk about it. But I don't aim to create another documentation about it because I already did. Please visit the &lt;a href="https://axe-api.github.io/"&gt;Axe API Documentation&lt;/a&gt; page. You may find many details about the project.&lt;/p&gt;

&lt;p&gt;I am asking for feedback from everybody who has anything to say. Whenever I think about the project, it makes me so excited because of its potential. I hope you may have the same feelings.&lt;/p&gt;

&lt;p&gt;Also, please keep in mind that the &lt;strong&gt;Axe API&lt;/strong&gt; is not ready to use in production, and it is in the beta stage. &lt;/p&gt;

&lt;p&gt;You can star the project on &lt;a href="https://github.com/axe-api/axe-api"&gt;GitHub&lt;/a&gt; and get notifications about the news.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thanks for the &lt;a href="https://pixabay.com/photos/greece-parthenon-temple-ruins-1594689/"&gt;cover image&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>node</category>
      <category>programming</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Open Mail: Ask the right questions to the right people and make the conversation public</title>
      <dc:creator>Özgür Adem Işıklı</dc:creator>
      <pubDate>Sun, 14 Feb 2021 15:57:12 +0000</pubDate>
      <link>https://dev.to/iozguradem/open-mail-ask-the-right-questions-to-the-right-people-and-make-the-conversation-public-14d7</link>
      <guid>https://dev.to/iozguradem/open-mail-ask-the-right-questions-to-the-right-people-and-make-the-conversation-public-14d7</guid>
      <description>&lt;p&gt;I would like to share my new side project with you; Open Mail (&lt;a href="https://openmail.app"&gt;https://openmail.app&lt;/a&gt;). It is a platform that you can ask people their opinions about some ideas. The special side of it; all conversations can be read by anyone. It will be completely open for everyone. Asking a question in a private communication channel, like an email, is not useful for everyone. On the other hand, asking a question on a social media platform has a different problem; everybody can answer your question. But what about the expertise of the person who answers your question?&lt;/p&gt;

&lt;p&gt;I want to solve this problem with Open Mail. You can ask a question to get a high-quality opinion from skilled people, and all the conversations between you will be able to read by everybody.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b9a5npwn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8jq1sz53j6nmzmmcbp30.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b9a5npwn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/8jq1sz53j6nmzmmcbp30.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I continue to develop the Open Mail. But I created an early-access form to give an advantage to people who want to get the simplest or the best username. You can register to get early access with a beautiful username.&lt;/p&gt;

&lt;p&gt;Also, I would love to hear your feedback about the idea. Please let me know everything about the product.&lt;/p&gt;

&lt;p&gt;Looking forward to reading your answers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://openmail.app"&gt;https://openmail.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>startup</category>
      <category>feedback</category>
      <category>question</category>
    </item>
    <item>
      <title>Evolutionary Artificial Intelligence</title>
      <dc:creator>Özgür Adem Işıklı</dc:creator>
      <pubDate>Wed, 13 May 2020 15:18:47 +0000</pubDate>
      <link>https://dev.to/iozguradem/evolutionary-artificial-intelligence-4m8a</link>
      <guid>https://dev.to/iozguradem/evolutionary-artificial-intelligence-4m8a</guid>
      <description>&lt;h4&gt;
  
  
  Abstract
&lt;/h4&gt;

&lt;p&gt;Nowadays, everybody is talking about &lt;em&gt;Artificial Intelligence (AI)&lt;/em&gt;. It is like a festival everyday. New tools, new approaches, new software... Despite some of our fears, it is the new magic of our usual life[1]. On the other hand, I feel different from happiness and fear. I feel that &lt;em&gt;we are stuck in a dead end street&lt;/em&gt; while we are trying to create AI. I feel like that because; I know that we can't see the front enough when we drive too fast. At such times, we should stop and think about what are we doing.&lt;/p&gt;

&lt;p&gt;First of all, many people think that we had good progress in artificial intelligence. We have self-driving cars, face recognition systems and even deep fake porn videos. Besides, there are many new areas which haven't been worked on yet. &lt;/p&gt;

&lt;p&gt;I do not doubt that everybody agrees we have some kind of &lt;em&gt;intelligence&lt;/em&gt;. Certainly, they are &lt;em&gt;artificial&lt;/em&gt; because we have built them by machines. But I think that we forget our main target while trying to solve tiny problems. Can you remember what our main target was?&lt;/p&gt;

&lt;p&gt;A. M. Turing published a paper which is called "Computing Machinery And Intelligence" in 1950 [2]. He asked a very simple question in his paper; &lt;em&gt;"Can machines think?"&lt;/em&gt;. After this question, humanity has started its most inspiring journey. But after 70 years, today, I want to criticize the point where we have arrived. I don’t think we have machines which can think. Moreover, with current methods, I don’t think that we will be able to create a machine which can think in the future.&lt;/p&gt;

&lt;p&gt;In this article, I will try to explain why we are going to neglect to build machines who can think and I will suggest another approach.&lt;/p&gt;

&lt;h4&gt;
  
  
  Terminology
&lt;/h4&gt;

&lt;p&gt;The best way of thinking about something is starting to try to understand the terminology. Without understanding the essence of the words, we can’t think about ideas. That's why firstly we should define basic terms. We should answer those questions; &lt;em&gt;"What is artificial?"&lt;/em&gt; and &lt;em&gt;"What is intelligence?"&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;I use &lt;a href="https://dictionary.cambridge.org/"&gt;Cambridge Dictionary&lt;/a&gt; online to find the meanings of words. According to this, &lt;strong&gt;artificial&lt;/strong&gt; is something &lt;strong&gt;made by people, often as a copy of something natural&lt;/strong&gt; [3]. This is a great definition because it says that there should be something &lt;strong&gt;natural&lt;/strong&gt; to make a new copy by people. So what does &lt;strong&gt;natural&lt;/strong&gt; mean? It is something which &lt;strong&gt;can be found in nature and not involving anything made or done by people&lt;/strong&gt;[4].&lt;/p&gt;

&lt;p&gt;At this point, we know that what &lt;em&gt;artificial&lt;/em&gt; and &lt;em&gt;natural&lt;/em&gt; mean. When we use &lt;em&gt;artificial&lt;/em&gt; word with &lt;em&gt;intelligence&lt;/em&gt;, &lt;em&gt;intelligence&lt;/em&gt; should be the natural one according to the definition. When we look at the definition of intelligence, clearly we see that is true. Cambridge Dictionary says that intelligence is &lt;strong&gt;the ability to learn, understand, and make judgments or have opinions that are based on reason&lt;/strong&gt;[5]. Shortly, we are trying to create artificial intelligence which can learn, understand and make judgments. Best natural intelligence in the world is the human brain. It means that the main target is to copy the human brain.&lt;/p&gt;

&lt;h4&gt;
  
  
  Misunderstandings
&lt;/h4&gt;

&lt;p&gt;Until today, we had been trying to &lt;em&gt;create&lt;/em&gt; an &lt;em&gt;artificial brain&lt;/em&gt; which can learn, understand and make judgments. Because if we could do that, it means, we would have &lt;em&gt;a real artificial intelligence&lt;/em&gt;. Our main target was to build something like the human brain. The problem was that it is too complicated to be designed by humans. Up to the present, we only made some tiny problem solvers. Today's &lt;em&gt;artificial intelligence&lt;/em&gt; is not even close to the human mind.&lt;/p&gt;

&lt;p&gt;In our studies, we focus on the result of the journey and miss the journey itself. Think about &lt;em&gt;the natural one&lt;/em&gt; which we want to make an artificial of, &lt;em&gt;human intelligence&lt;/em&gt;. It hasn't been developed by other intelligent creatures. It is a completely natural result of nature. It is the magical presence of the &lt;em&gt;evolution&lt;/em&gt;. But we think that we can design it simply. To accomplish this, we are trying to create learning models when we face a real-world problem. With this method, we can solve tiny problems for a short time. At the end of the day, we will not have an &lt;em&gt;artificial intelligence&lt;/em&gt; like the human brain.&lt;/p&gt;

&lt;p&gt;First of all, there are billions of problems in the universe. Because of the eternity of the universe, we know only a small amount of these problems. Even we can be able to know, we have to create new learning models for every specific problem. If we create a wrong learning model, we can get the wrong solution. Also, there is not any idea about how we can bind all these &lt;em&gt;learning models&lt;/em&gt; in one brain in order to create &lt;em&gt;one intelligence&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;We should ask ourselves, do we want to create a real &lt;em&gt;artificial intelligence&lt;/em&gt;?&lt;/p&gt;

&lt;h4&gt;
  
  
  Why Is Human Brain Perfect?
&lt;/h4&gt;

&lt;p&gt;In this section, I want to clarify some points. When we create a &lt;em&gt;learning model&lt;/em&gt; in the traditional artificial intelligence way, we can call &lt;em&gt;that learning model&lt;/em&gt; as a brain. We can train that brain very well if it is perfect. The bad part of traditional methodologies is not the training process. They are bad because we aim to control how a brain should be made. We want to have a &lt;em&gt;perfect brain&lt;/em&gt;. But the human brain is too complex and we barely know how it is working.&lt;/p&gt;

&lt;p&gt;Let's think about the human brain for a while. Why it is so precious? How could be so clever?&lt;/p&gt;

&lt;p&gt;Human brain -or any kind of creatures' brain- has been developed by nature in under the circumstances of evolution. It hasn't been designed by anybody. It didn't have any aim. The brain we have has a &lt;em&gt;perfect learning model&lt;/em&gt; today but it is not here for any specific reason. We have it now because it helped us to survive. That's why I claim that evolution idea should be the key element of creating a real artificial intelligence.&lt;/p&gt;

&lt;h4&gt;
  
  
  Evolutionary Artificial Intelligence
&lt;/h4&gt;

&lt;p&gt;You would discover &lt;em&gt;natural selection&lt;/em&gt; when you think why a lion is so magnificent. But once upon a time, they weren't as perfect as they are today. Circumstances were so hard. If a creature doesn't adapt to its environment very well, it would became extinct. They have to have special skills to survive in their nature such as camouflage, hunting or speed. With this way, we can design an artificial intelligence which could be perfect if we create an evolutionary environment for it.&lt;/p&gt;

&lt;p&gt;To create an environment for artificial intelligence, we should understand basic facts of evolution. All parts of evolution should be simulated on computers because our main target is making a copy of real world. Definition and finding equal corresponses of evolutions are our basic steps to create &lt;em&gt;evolutionary artificial intelligence&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;In real world, there are &lt;strong&gt;organisms&lt;/strong&gt; which are single living plant, animal or virus [6]. Those organisms live on a &lt;strong&gt;planet&lt;/strong&gt; like earth. Also there are many &lt;strong&gt;stimulants&lt;/strong&gt; which can affect the organism. When an interaction takes place, the organism &lt;strong&gt;responds&lt;/strong&gt;. This process is called &lt;strong&gt;cell signaling&lt;/strong&gt; [7]. Besides, those organisms reproduce themselves. While they are creating a new offspring, &lt;strong&gt;DNA&lt;/strong&gt; chains of ancestors are used. Every new offspring should be the same as its ancestor. But in real world, there is a &lt;strong&gt;mutation&lt;/strong&gt; factor which disrupts the DNA structure. This new organism with a new DNA chain is tested by the &lt;em&gt;environment&lt;/em&gt; about how suitable it is to live in the environment. This is called &lt;strong&gt;natural selection&lt;/strong&gt;. After this life cycle has continued for a long time, different kind of animals have appeared. One of them is us which has got a super brain which can learn, understand, and make judgments. And I claim that if we can create same structure on computers, we can produce an artificial  intelligence on machines.&lt;/p&gt;

&lt;p&gt;In our virtual environment, the artificial  intelligence doesn't have to be a physical creature such as a bug, a lion or a human. We aim to create an intelligence. To make it, we don't have to have a real body. Instead of creating a body -like a robot-, we can simple create a computer program. &lt;/p&gt;

&lt;p&gt;So we can name a simple &lt;em&gt;program&lt;/em&gt; as an organism. When a program has been executed, executor of the program (physical presence of computer) would be the &lt;em&gt;planet&lt;/em&gt;. In this case, stimulants would be every signal in the system such as camera signals, microphone signals, every data transmission in ports, the data which is located in RAM or HDD. When a stimulant has been processed, &lt;em&gt;the program&lt;/em&gt; will produce a new response for the computer. As a principle of evolution, organism doesn't have any purpose in its actions. All actions are generated randomly. Also, the program should have an ability to create a copy of itself so that it creates new offsprings. While it is creating a new copy, it should change its structure too. Because organisms have DNA chains which define the behavior of the organism. In our virtual world, the program should have its DNA structure. Maybe, the code of the program can be use as DNA. With this method, every program should have its code. Also every program should be able to create a new copy with its code. Of course, as a key point, if we are talking about evolution, while the program is creating a new copy, it should mutate the code randomly, a little bit. As a result, a new copy of the program should be &lt;em&gt;almost&lt;/em&gt; the same as the ancestor.&lt;/p&gt;

&lt;p&gt;You might think that a system like this can turn to a garbage. You are right because, probably most of programs will be turn to garbage which is something can't be executed. But in this randomness, some programs which have some ability to survive may occur. This little &lt;em&gt;chance&lt;/em&gt; is the hearth of the evolution which has created human brain.&lt;/p&gt;

&lt;p&gt;Of course, this method can have some problems in it. That's why we should start to criticize the theory.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Problem Of DNA
&lt;/h4&gt;

&lt;p&gt;As I mentioned before, the code of the program can be used as DNA. The problem is that most of the modern programming languages are so fragile. Even a missing comma can break the compiling process. In the copying process, the code should be mutated randomly. But most of the new versions will not be able to compile. Even &lt;em&gt;stillbirth scenario&lt;/em&gt; is a something which we see in real life, at least one of the new version should survive. That's why low-level programming languages, like &lt;em&gt;Assembly&lt;/em&gt;, can be more useful to use as DNA. &lt;/p&gt;

&lt;p&gt;On the other hand, creating a completely new DNA structure which is less fragile can be efficient too. The new structure should be able to mutate easily and should be less fragile than high-level programming code. &lt;/p&gt;

&lt;p&gt;Whichever way (low-level programming language or new DNA structure) we choose, every program should have a DNA which carries information about its behavior.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Problem Of Time
&lt;/h4&gt;

&lt;p&gt;Evolution started almost 5 billion years ago. The human brain is a very new concept for evolution. The question is, do we need same amount to create a new copy of the human brain? We can create a new version of a program in milliseconds. But we can't wait another 5 billion years. It is too much time for us. That's why the problem of time is a very important drawback for us. &lt;/p&gt;

&lt;p&gt;Also, I don't think that this is something which is computable. Because of randomness, we can't know it will take almost the same time. On the other hand, it doesn't have to follow the same evolution path. Probably, it will follow a completely different style.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Problem Of Random Infinity
&lt;/h4&gt;

&lt;p&gt;Hearth of the human brain's evolution was &lt;em&gt;randomness&lt;/em&gt;. But it can be bad as it can be great. Because, if we talk about creating new DNA structure with randomity, I am sure that we will have different type of programs. In their nature (physical presence of computer), we can design a system which can kill them. In those circumstances, some of new programs types can adapt to that environment. We can observe the evolution of new creatures. But they don't have to follow the same evolutionary path as the human mind. There is no obligation to follow the same path. &lt;/p&gt;

&lt;p&gt;First, we can't create the same environment as the evolution of the human brain has. The environment could be similar but not the same. We can even create almost the same environment (which is not possible), randomness will still follow a different path because of infinity. We can't know what kind of creatures we will have. We can't know what kind of intelligence we will have. It is a completely blind shot.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Problem Of Security Of Humanity
&lt;/h4&gt;

&lt;p&gt;Because of the problem for random infinity, we can't be sure what we will have. There can be some great creatures which can live on a computer. But also, there can be some destructive creatures too which want to destroy everything. We can create an environment which is closed outside to block undesirable results. But it will reduce the speed of evolution. The speed of evolution would increase as long as creatures can have the data. &lt;/p&gt;

&lt;p&gt;We can face the fact that computers destroy humanity.&lt;/p&gt;

&lt;h4&gt;
  
  
  Epilogue
&lt;/h4&gt;

&lt;p&gt;There are many artificial intelligence methods which we can use today. Most of them are so powerful to solve problems. Probably we will make our life easier with those artificial intelligence applications. After all, I am not happy with this result because they can't think like the human mind. &lt;/p&gt;

&lt;p&gt;I suggest a solution to solve this thinking problem. I claim that we can create artificial intelligence with a very old method, &lt;em&gt;evolution&lt;/em&gt;, which is responsible for creating a human mind. I claim that artificial intelligence can occur randomly on a computer if we apply basic evolution rules. On the other hand, I accept that there are some possible problems which should be solved in practice. &lt;/p&gt;

&lt;p&gt;The human mind is the most exciting result of evolution. Because it can compose operas. It can write sonnets. Moreover, nobody organized the human brain in order to do those activities. A human mind does this because it can think. What a wonderful thing it is to think, isn't it? If nature has built it once, it can do it one more time for us.&lt;/p&gt;

&lt;p&gt;Maybe the evolutionary artificial intelligence will be the best teacher for us to love each other more despite the fears we have. If you think the same, please contribute to the idea as much as you can. If this is a bad idea, please explain why, and we will forget this theory.&lt;/p&gt;

&lt;p&gt;(This post was &lt;a href="https://ozguradem.net/english/coding/essays/2019/09/28/evolutionary-artificial-intelligence/"&gt;originally&lt;/a&gt; published on &lt;a href="https://ozguradem.net"&gt;ozguradem.net&lt;/a&gt;. I also appreciate to my friends (Furkan Başaran, Alperen Yılmaz, Melih Çaylak, Fatih Boyacı and Murat Palankalılar) who reviewed this article before I publish.)&lt;/p&gt;

&lt;h3&gt;
  
  
  References
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.vox.com/future-perfect/2018/11/2/18053418/elon-musk-artificial-intelligence-google-deepmind-openai"&gt;[1] Why Elon Musk fears artificial intelligence&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.csee.umbc.edu/courses/471/papers/turing.pdf"&gt;[2] Computing Machinery And Intelligence&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dictionary.cambridge.org/dictionary/english/artificial"&gt;[3] Meaning of artificial in English - Cambridge Dictionary&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dictionary.cambridge.org/dictionary/english/natural"&gt;[4] Meaning of natural in English - Cambridge Dictionary&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dictionary.cambridge.org/dictionary/english/intelligence"&gt;[5] Meaning of intelligence in English - Cambridge Dictionary&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dictionary.cambridge.org/dictionary/english/organism"&gt;[6] Meaning of organism in English - Cambridge Dictionary&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.khanacademy.org/science/biology/cell-signaling/mechanisms-of-cell-signaling/a/introduction-to-cell-signaling"&gt;[7] Introduction to cell signaling - Khan Academy&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
