2013-10-26 1 views
3

Ruby에서 RESTful API로 공개하고자하는 정보로 가득 찬 mysql 스키마가 있습니다. 내가 아는 어떤HTTP RESTful API (Ruby 전용) 빌드

지금까지

  • "편안하고"당신의 API에 대한 특정 기준을 다음을 의미하며, 특정 구현 언어와 연결되어 있지 않습니다.
  • 나는 내 데이터베이스시나 프로젝트는 루비
  • 을 사용

예제를 API를 설정하는 쉬운 방법이 될 것으로 보인다

  • 에서 필요한 데이터를 가져 루비에서 MySQL의 보석을 사용할 수 있습니다

    의 내가 우리를 싶습니다 내가 서버 (12.34.56.78) 및

    /opt/example_code/main.rb. 
    

    에 위치한 해당 서버 내 루비 코드가 있다고 가정 해 봅시다 어도 이해가 안 무엇 SSN

    을 보여 말인가 고객 1234에 대한 레코드를 검색하기 위해

    12.34.56.77/customers/1234?show_ssn=true 
    

    처럼 뭔가를 조회 할 수

    1. 이 작업을 수행하려면 어떤 기본 서버 측 소프트웨어를 실행해야합니까? 나는 항상 아파치 또는 nginx 같은 웹 서버의 일종이 필요하다고 가정합니다. 파이썬 (python -m SimpleHTTPServer)으로 간단한 HTTP 서버를 실행할 수 있다는 것을 알고있다. 터미널 서버가 열려 있거나 실행을 취소하면된다. 아파치와 nginx는 비슷하지만 프로세스로 계속 실행됩니까?

    2. 사용자가 12.34.56.77에 도달하면 서버에 내 스크립트에 대해 /opt/example_code이 표시되어야한다는 것을 어떻게 알릴 수 있습니까? 내가 설정할 수있는 일종의 구성이 있습니까?

      HTTP 포트가 작동하는 방식이 모호합니다. 특정 디렉토리를 "가리 키도록"특정 포트를 설정해야합니까? 예를 들어, 그들 만 포트 5678 서버가 무엇이 다음에 일어날 제대로 내 /opt/example_code 디렉토리 HTTP 서버가 마지막으로 요청을 해독하고 /opt/example_code로 리디렉션

      12.34.56.77:5678/customers/1234?show_ssn=true 
      
    3. 에보고 알 수 지정하면? 해당 디렉토리에 내 main.rb 파일을 실행하도록 지시하려면 어떻게합니까? 또한 URI ("/customers...true")가 루비 앱에 전달되어 Sinatra가 해독 할 수있는 방법은 무엇입니까?

    나는이 과정을 만드는 개개의 조각들을 가지고 있다고 생각하지만, 그것들이 모두 어떻게 통합되는지 고심하고있다.

    도움 주셔서 감사합니다.

  • 답변

    1
    1. 웹 서버 (Apache 또는 Nginx)를 실행해야합니다. 모든 요청은 웹 서버를 통해 이루어집니다. 정적 페이지, 자산 등의 요청 인 경우 웹 서버가 처리합니다.요청을 처리해야하는 경우 응용 프로그램 서버 (thin, puma, unicorn ...)로 전달됩니다. 이제 Apache 나 Nginx가 악의적으로 처리 될 것입니다. 즉 프로세스가 터미널이 아닌 backround에서 실행됩니다. 응용 프로그램 서버에도 동일하게 적용됩니다. 많은 온라인 튜토리얼을 찾을 수 있습니다. 또한 문서를 확인하십시오.

    2. 글쎄 실제로 서버에 따라 다릅니다. 아파치와 Nginx 모두 자신 만의 방식입니다. 예 : Nginx의 사이트 사용 가능 파일을 편집하여 그러나 다시 한 가지를 선택하고 문서를 확인하십시오. 모든 것을 찾을 수 있습니다.

      포트 정보 : 아니요, 그러지 마세요. 서버는 구성 때문에 응용 프로그램을 찾을 위치를 알 수 있습니다. 포트를 사용하면 더 많은 서버 또는 프로세스를 실행할 수 있습니다. 응용 프로그램 서버가 포트 3000에서 실행되고 있다고 가정 해보십시오. 다른 포트는 더 이상 사용할 수 없습니다. 즉, 예를 들어 같은 머신에있는 MySQL 서버를 실행하려면 다른 포트를 사용해야합니다.

    3. 웹 서버를 구성하여 부트 스트랩 파일을 찾을 위치를 알 수 있습니다./customers와 같은 경로는 귀하의 sinatra 앱에 선언됩니다. 이 http://recipes.sinatrarb.com/p/deployment/nginx_proxied_to_unicorn을 살펴보십시오.

    서버 관리에 대한 깊은 지식없이 프로덕션 환경에서 응용 프로그램을 실행하는 것은 매우 위험 할 수 있습니다. 많은 일이 잘못 될 수 있습니다. 어쩌면 좋은 해결책은 클라우드 기반 서비스 (Heroku, RackSpace ...)를 사용하는 것입니다.

    나는 비슷한 것을했다. Grape (https://github.com/intridea/grape)에 내 API를 작성했는데 이는 sinatra와 매우 유사하지만 특별히 API를 작성하는 디자인입니다. 내 웹 서버 Nginx 및 푸마 (https://github.com/puma/puma) 내 응용 프로그램 서버로 사용하고 있습니다.

    행운을 빈다.

    server { 
        listen 80; 
        server_name site1.com; 
    } 
    
    server { 
        listen 443; 
        server_name site1.com; 
        root /path/to/application/public-folder; 
        passenger_enabled on; 
    } 
    
    : Nginx의 구성에

    예 (동일한 서버의 두 서비스)

    /path/to/nginx/conf/sites-enabled/site1.com (승객과의 nginx 사용)

    /path/to/nginx/conf/sites-enabled/site2.com (유니콘과 일부 고급 구성 nginx를 사용) :

    server { 
        listen 80; 
        server_name site2.com; 
    } 
    
    server { 
        listen 443; 
        server_name site2.com; 
        root /path/to/application/public-folder; 
    
        client_max_body_size  10m; 
        client_body_buffer_size 128k; 
    
        proxy_connect_timeout  90; 
        proxy_send_timeout   90; 
        proxy_read_timeout   90; 
    
        proxy_buffer_size   4k; 
        proxy_buffers    4 32k; 
        proxy_busy_buffers_size 64k; 
        proxy_temp_file_write_size 64k; 
    
    
        location/{ 
        proxy_set_header Host $http_host; 
        proxy_set_header X-Real-IP $remote_addr; 
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
        proxy_set_header X-Forwarded-Proto $scheme; 
        proxy_redirect off; 
    
        proxy_pass http://unicorn_cluster; 
        } 
    } 
    
    +0

    매우 유용합니다, 감사합니다! 나열한 모든 리소스를 살펴 보겠습니다. 괜찮다면 또 다른 사소한 질문이나 두 가지로 돌아올 수도 있습니다. 그러나 그것은 저를 시작하기에 적당합니다. 정말 고마워요! – user2490003

    +0

    실제로 한 가지 질문이 떠오른다. 서버가 다양한 서비스를 위해 여러 개의 API를 가지고 있다면 어떨까? 모든 코드를 한 곳에서 가져야합니까, 아니면 구성에서 어떤 API 리소스 (예 :/customer vs/employee)를 기반으로 다른 디렉토리를 가리킬 수 있습니까? – user2490003

    +0

    하나의 서버에서 여러 위치에 원하는만큼의 API를 가질 수 있습니다. 다른 웹 응용 프로그램과 같은 상황입니다. 하나의 서버가 여러 웹 응용 프로그램을 호스팅 할 수 있습니다. 이것을 구성해야합니다. 나는 어떻게이 설정이 Nginx를 찾을 수 있는지 보여주는 나의 대답을 편집했다. –